python中的is, ==与对象的相等判断
2024-10-19 03:35:35
在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
最新文章
- Unity学习笔记
- 安装.Net Framework3.5
- IOS 二维码的实现
- Python—>;Mysql—>;Dbvisualizer
- echo、print、sprint、sprintf输出
- maven 基本常识以及命令
- Dynamics CRM 2013 SP1 升级到Dynamics CRM 2015
- How to evaluate a transimpedance amplifier (part 2)
- function复习
- php相关学习资源
- crystal report format number
- Android ListView异步加载数据
- Flex开发小结(1)如何使用AdvancedDataGrid
- 【转】【可用】Android 登录判断器,登录成功后帮你准确跳转到目标activity
- webpack学习笔记—webpack安装、基本配置
- 【SF】开源的.NET CORE 基础管理系统系列导航
- 【转载】QT QTableView用法小结
- [转]Python UnicodeEncodeError: &#39;gbk&#39; codec can&#39;t encode character 解决方法
- 动态SQL2
- 大佬RQY真的强
热门文章
- shell中的颜色显示
- 数据添加到solr索引库后前台如何搜索
- HDU 4549 矩阵快速幂+快速幂+欧拉函数
- 题解【bzoj2427 [HAOI2010]软件安装】
- OpecnCV训练分类器详细整理
- 前端多层回调问题解决方案之$.Deferred
- SpringMVC+MyBatis开发中指定callSettersOnNulls,可解决返回字段不全的问题
- 51Nod 1091 线段重叠 | 贪心
- Codeforces Round #380 (Div. 2)/729D Sea Battle 思维题
- 省队集训Day1 过河