Python的对象比较指 == 和 is的区别
- is比较 的是两个实例对象是不是同一个对象,也就是说这两个对象的地址,通过id()函数可以获取,是不是相同
- == 比较的是两个实例对象的值是否相等,比较的是内存中存放的内容,可以不是同一个对象,只要内容一样就可以了
a = ['x','y']
b = a
# a的引用复制给了b,其实相当于a和b同时指向了一个对象,即内存地址是一样的
b is a # true
id(a) == id(b) # true
当然内容也是相同的
a == b
# b通过切片操作获得了和a一样的内容,但是它和a不是同一个对象
b = a[:]
b is a # false
b == a # true
id(a) == id(b) # False
通常我们关心的不是内存地址,而是对象的内容.因此Python中我们使用==的频率比is多很多.
那什么时候用is呢?is 和 == 相比有一个巨大的优势:它计算很快,因为它不重载,少了函数调用开销而直接比较两个整数的id.而a==b则等同于是a.eq(b).重载了对应的方法.
is常用的地方
和None值进行比较
a is None or a is not None
总结:
- is 比较的是两个对象的内存地址,也就是通过id()函数求得得值,是否指向同一个地址
2.==比较的是两个对象的内容是否相等,值是否相等.
3.小整数池[-5,256]在全局解释器范围内被放入了缓冲提供重复使用.
4.is运算符比==运算符运算效率高.