在java中,对于两个对象啊a,b,若a==b表示,a和b不仅值相等,而且指向同一内存位置,若仅仅比较值相等,应该用equals。而在python中对应上述两者的是‘is’ 和‘==’。

(1) python中的基本类型的is判断

  需要注意的是,对于python中的基本类型,如str,数值类型(int,long,float,complex)不要用is来做相等判断,下面给出is判断为False的例子:

str_123 = '123'
print 'id("123"):{}'.format(id(str_123))
itostr_123 = str(123)
print 'id(str(123)):{}'.format(id(itostr_123)) p1 = 256 + 1
p2 = 257
print 'id(p1):{}'.format(id(p1))
print 'id(p2):{}'.format(id(p2))

其结果是:

id(""):40187864
id(str(123)):40121608
id(p1):40214096
id(p2):40214744

str或者是int变量的id并不相同。

(2) python中对象的相等判断

  简单的对于对象的相等判断方式有两种:

例如,自定义类Person:

class GenderEnum(object):
MALE = 'MALE'
FEMALE = 'FEMALE' class Person(object):
def __init__(self, name, gender=GenderEnum.MALE, age=0):
self.name = name
self.gender = gender
self.age = age def __repr__(self):
type('str')
return '<Person %r %r %r>' % (self.name, self.gender, self.age)

若用==做如下判断:

p1 = Person('tom', age=3)
p2 = Person('tom', age=3)
p3 = Person('jerry', age=5)
print 'id(p1):{}'.format(id(p1))
print 'id(p2):{}'.format(id(p2))
print 'id(p3):{}'.format(id(p3))
print p1 == p2
print p1 == p3

结果:

id(p1):39445784
id(p2):39445840
id(p3):39445896
False
False

p1,与p2的值虽然相同,但是地址不同。

想要判断值相等,第一个方法是直接用instance.__dict__来判断:

p1.__dict__ == p2.__dict__

另外一种方法是在Person class中加上自定义的__eq__函数:

    def __eq__(self, other):
if self.name != other.name:
return False
if self.gender != other.gender:
return False
if self.age != other.age:
return False
return True

最新文章

  1. Unity学习笔记
  2. 安装.Net Framework3.5
  3. IOS 二维码的实现
  4. Python—&gt;Mysql—&gt;Dbvisualizer
  5. echo、print、sprint、sprintf输出
  6. maven 基本常识以及命令
  7. Dynamics CRM 2013 SP1 升级到Dynamics CRM 2015
  8. How to evaluate a transimpedance amplifier (part 2)
  9. function复习
  10. php相关学习资源
  11. crystal report format number
  12. Android ListView异步加载数据
  13. Flex开发小结(1)如何使用AdvancedDataGrid
  14. 【转】【可用】Android 登录判断器,登录成功后帮你准确跳转到目标activity
  15. webpack学习笔记—webpack安装、基本配置
  16. 【SF】开源的.NET CORE 基础管理系统系列导航
  17. 【转载】QT QTableView用法小结
  18. [转]Python UnicodeEncodeError: &#39;gbk&#39; codec can&#39;t encode character 解决方法
  19. 动态SQL2
  20. 大佬RQY真的强

热门文章

  1. shell中的颜色显示
  2. 数据添加到solr索引库后前台如何搜索
  3. HDU 4549 矩阵快速幂+快速幂+欧拉函数
  4. 题解【bzoj2427 [HAOI2010]软件安装】
  5. OpecnCV训练分类器详细整理
  6. 前端多层回调问题解决方案之$.Deferred
  7. SpringMVC+MyBatis开发中指定callSettersOnNulls,可解决返回字段不全的问题
  8. 51Nod 1091 线段重叠 | 贪心
  9. Codeforces Round #380 (Div. 2)/729D Sea Battle 思维题
  10. 省队集训Day1 过河