- is 比较的是两个实例对象是不是完全相同,它们是不是同一个对象,占用的内存地址是否相同
- == 比较的是两个对象的内容是否相等,即内存地址可以不一样,内容一样就可以了(只看数值是否相同)。默认会调用对象的
__eq__()方法。
区别
- is 与 == 相比有一个比较大的优势,就是计算速度快,因为它不能重载,不用进行特殊的函数调用,少了函数调用的开销而直接比较两个整数 id。而 a == b 则是等同于
a.__eq__(b)。继承自 object 的__eq__方法比较两个对象的id,结果与 is 一样。但是多数Python的对象会覆盖object的__eq__方法,而定义内容的相关比较,所以比较的是对象属性的值,且'=='操作符则会递归地遍历对象的所有值,并逐一比较。
扩展
- 在变量和单例值之间比较时,应该使用 is。目前,最常使用 is 的地方是判断对象是不是 None
- 切片拷贝是浅拷贝
- 小整数对象[-5,256]在全局解释器范围内被放入缓存供重复使用(所以当两个变量的值相等且为小整数时,内存地址相同)
- 直接赋值都是赋值的引用