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

sna*_*ile 43 python equality

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

例:

x = [1, 2, 3]
y = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

现在x == y是True,因为x和y相等,但是x和y不是同一个对象.
我正在寻找像sameObject(x, y)这种情况应该是假的东西.

Mar*_*ers 60

您可以is用来检查两个对象是否具有相同的标识.

>>> x = [1, 2, 3]
>>> y = [1, 2, 3]
>>> x == y
True
>>> x is y
False
Run Code Online (Sandbox Code Playgroud)

  • 身份意味着 id() ? (2认同)

Bar*_*arm 5

以马克·拜尔斯的答案为基础:

is当变量包含对象而不是原始类型时,区分身份的评估将起作用。

object_one = ['d']
object_two = ['d']
assert object_one is object_two  # False - what you want to happen

primitive_one = 'd'
primitive_two = 'd'
assert primitive_one is primitive_two  # True - what you don't want to happen
Run Code Online (Sandbox Code Playgroud)

如果您还需要比较基元,建议您使用内置id()函数。
Python文档

返回对象的“身份”。这是一个整数,可以保证在此对象的生存期内唯一且恒定。

这样就变成了:

assert id(primitive_one) == id(primitive_two)  # False
Run Code Online (Sandbox Code Playgroud)