【发布时间】:2010-03-13 14:28:49
【问题描述】:
is 运算符如何确定两个对象是否相同?它是如何工作的?我找不到它的文档。
【问题讨论】:
-
类似于C中比较指针,或者Java中对象之间使用
==。 -
S.Lott:对不起,我不是文档系统方面的专家,看了几十篇文档,我无法找到确切的含义。
标签: python
is 运算符如何确定两个对象是否相同?它是如何工作的?我找不到它的文档。
【问题讨论】:
==。
标签: python
每个对象都有一个身份,一个类型 和一个值。对象的身份 一旦发生就永远不会改变 创建;你可能会认为它是 对象在内存中的地址。 “是” 运算符比较两个的身份 物体; id() 函数返回一个 表示其身份的整数 (目前实施为其 地址)。
这似乎表明它比较了参数的内存地址,尽管它说“你可能认为它是内存中的对象地址”这一事实可能表明特定的实现不是保证的;只有语义是。
【讨论】:
通过比较引用的对象来查看操作数是否指向同一个对象。
>>> a = [1, 2]
>>> b = a
>>> a is b
True
>>> c = [1, 2]
>>> a is c
False
c 与a 不是同一个列表,因此is 关系为假。
【讨论】:
is 在 Python 中几乎唯一的应用是比较单例,例如 if foo is None 或 sentinel = object() ... if bar is sentinel。
要添加到其他答案,您可以将a is b 视为is_(a, b) 工作:
def is_(a, b):
return id(a) == id(b)
注意directly replacea is b不能和id(a) == id(b)一起使用,但上面的函数通过参数避免了这种情况。
【讨论】: