媒介
在讲is和==这两种运算符区别之前,首先要知道Python中工具包括的三个根基要素,别离是:id(身份标识)、python type()(数据范例)和value(值)。is和==都是对工具举办较量判定浸染的,但对工具较量判定的内容并不沟通。下面来看看详细区别在哪。
Python中较量两个工具是否相等,一共有两种要领,简朴来说,它们的区别如下:
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**3 False >>> 1000 == 10**3 True
通过计较获得的赋值,不会利用缓存区。从第一个代码示例中可以看出。
对付字符串,你可以通过利用intern函数强制利用缓存区。