x和y是两个变量。
我可以使用x == y
来检查它们是否相等,但我如何检查它们是否具有相同的身份?
示例:
x = [1, 2, 3]
y = [1, 2, 3]
现在x == y
是True,因为x和y相等,但是x和y不是同一个对象。
我正在寻找类似于sameObject(x, y)
这样的函数,在这种情况下该函数应该返回False。
is
来检查两个对象是否���有相同的标识(identity)。>>> x = [1, 2, 3]
>>> y = [1, 2, 3]
>>> x == y
True
>>> x is y
False
x is y
或者 id(x) == id(y)
,它们看起来是等价的。
id(object)
返回一个适应 C 风格指针哲学的唯一编号(标识符)。对于调试来说,id(x) == id(y)
更加方便。
x is y
更为简洁。
==
使用等值比较器 object.__eq__(self, other)
。id(...) == id(...)
。例如,id(foo()) == id(foo())
可能为真,而 foo() is foo()
不为真:由于 foo
返回的对象的生命周期可能不重叠,因此 Python 可以自由地回收 id()
值以用于两个对象。 - chepner
id(x)
返回一个在x
的生命周期内唯一的值,所以只要x
和y
同时存在,就是可以的。(两个不同时重叠的对象可能具有相同的id
值。) - chepner