Python中如何检查两个变量是否引用同一对象?

64

x和y是两个变量。
我可以使用x == y来检查它们是否相等,但我如何检查它们是否具有相同的身份?

示例:

x = [1, 2, 3]
y = [1, 2, 3]

现在x == y是True,因为x和y相等,但是x和y不是同一个对象。
我正在寻找类似于sameObject(x, y)这样的函数,在这种情况下该函数应该返回False。

2个回答

81
您可以使用 is 来检查两个对象是否���有相同的标识(identity)。
>>> x = [1, 2, 3]
>>> y = [1, 2, 3]
>>> x == y
True
>>> x is y
False

2
id() 的意思是什么? - iperov
1
id(x) 返回一个在 x 的生命周期内唯一的值,所以只要 xy 同时存在,就是可以的。(两个不同时重叠的对象可能具有相同的 id 值。) - chepner

3
使用 x is y 或者 id(x) == id(y),它们看起来是等价的。 id(object) 返回一个适应 C 风格指针哲学的唯一编号(标识符)。对于调试来说,id(x) == id(y) 更加方便。 x is y 更为简洁。
== 使用等值比较器 object.__eq__(self, other)

1
一般情况下应避免使用模式 id(...) == id(...)。例如,id(foo()) == id(foo()) 可能为真,而 foo() is foo() 不为真:由于 foo 返回的对象的生命周期可能不重叠,因此 Python 可以自由地回收 id() 值以用于两个对象。 - chepner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接