本文共 766 字,大约阅读时间需要 2 分钟。
作者:chen_h
微信号 & QQ:862251340 微信公众号:coderpaiPython 中比较两个对象是否相等,一共有两种方法,简单来说,他们的区别如下:
is
是比较两个引用是否指向了同一个对象(引用比较)。==
是比较两个对象是否相等。>>> a = [1, 2, 3]>>> b = a>>> b is a # a的引用复制给b,他们在内存中其实是指向了用一个对象True >>> b == a # 当然,他们的值也是相等的True>>> b = a[:] # b通过a切片获得a的部分,这里的切片操作重新分配了对象,>>> b is a # 所以指向的不是同一个对象了False>>> b == a # 但他们的值还是相等的True
is
比较的是两者是否是同一个对象,所以比较的是内存地址(id是否相同)。
==
是值比较。不可变对象,,例如 int
,str
,它会直接进行值比较。对于Python已知的对象,会调用他们的 __eq__
函数来比较。(其实已知的对象应该也是通过内置的 __eq__
函数来比较的)。对于自定义的对象,如果实现了 __eq__
函数,就会使用它比较,如果没有实现,效果和 ==
是一样的。
Python会对比较小的对象缓存,下次用到比较小的对象时,会去缓存区查找,如果找到,不会再开辟新的内存,而是继续把小对象的地址赋给新的值。例子:
>>> c = 1>>> d = 1>>> print(c is d) True>>> 1000 is 10**3False>>> 1000 == 10**3True
通过计算得到的赋值,不会使用缓存区。从第一个代码示例中可以看出。
对于字符串,你可以通过使用intern函数强制使用缓存区。
Reference:
转载地址:http://lvdqb.baihongyu.com/