is
运算符如何确定两个对象是否相同?它是如何工作的?我找不到记录。
答案 0 :(得分:13)
通过比较引用的对象来查看操作数是否指向同一个对象。
>>> a = [1, 2]
>>> b = a
>>> a is b
True
>>> c = [1, 2]
>>> a is c
False
c
与a
的列表不同,因此is
关系为false。
答案 1 :(得分:12)
每个对象都有一个标识,一个类型 和一个价值。对象的身份 一旦发生变化,永远不会改变 创建;你可能会认为它是 对象在内存中的地址。 '是' 运算符比较两个的身份 对象; id()函数返回一个 表示其身份的整数 (目前实施为 地址)。
这似乎表明它比较了参数的内存地址,尽管它说“你可能认为它是内存中对象的地址”这一事实可能表明特定的实现没有得到保证;只有语义。
答案 2 :(得分:6)
要添加其他答案,您可以将a is b
视为is_(a, b)
:
def is_(a, b):
return id(a) == id(b)
请注意,您不能directly replace a is b
id(a) == id(b)
,但上述功能会通过参数避免这种情况。
答案 3 :(得分:-1)
虽然@ msw的答案是正确的,但您可能想要考虑当例如这些对象是整数或字符串时会发生什么:
>>> a = 67
>>> b = 67
>>> c = 58
>>> a is b
True
>>> a is c
False
>>> a = 'dog'
>>> b = 'dog'
>>> c = 'cat'
>>> a is b
True
>>> a is c
False
换句话说,至少在涉及到这些数据类型时,表达式的结果是基础值的比较结果在实践中有时就好像它是一个值虽然事实上参考比较是 ,但基础知识的比较。