== 比较的是数值,自定义对象由eq方法决定; is比较的是 地址。
基础数据
例1:
1 | 400 a = |
1 | 3 c = |
例1的结果推测, == 比较的是数值; is比较的是 地址。
可是例2的结果仿佛推翻这个结论。但其实并没有。
造成例2结果的原因是python的垃圾回收。python对数值在【-5, 256】的数建立了一个对象池,所有在这个范围里的相同数指向的都是同一个对象。因此当数值为3时, is的结果也是true。
对自定义对象
1 | class Person(object): |
结论: == 的结果由对象的eq方法的定义决定;is判断内存地址。