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

时间:2010-09-05 19:54:35

标签: python equality

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

示例:

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

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

2 个答案:

答案 0 :(得分:53)

您可以使用is检查两个对象是否具有相同的身份。

>>> x = [1, 2, 3]
>>> y = [1, 2, 3]
>>> x == y
True
>>> x is y
False

答案 1 :(得分:2)

以Mark Byers的回答为基础:

当变量包含对象而不是原始类型时,用于区分身份的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

如果您还需要比较基元,我建议您使用内置的id()函数。
来自Python docs

  

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

这将变成这样:

assert id(primitive_one) == id(primitive_two)  # False