如何判断具有相同值的2个变量何时具有不同的身份?

时间:2013-06-16 03:56:07

标签: python memory

>>> x = [1,2,3]
>>> y = [1,2,3]
>>> print id(x),id(y)
43259384 43258744

>>> x = 1
>>> y = 1
>>> print id(x),id(y)
5417464 5417464

如您所见,第一次打印的ID不同,第二次打印的ID不同。为什么?是什么决定了2个变量的ID在被赋予相同值后是否相同?

2 个答案:

答案 0 :(得分:0)

小整数正在实习

  

具有较小值的短整数(通常介于-1和99之间)         “包容性”是“实习” - 只要结果具有这样的价值,         返回具有相同值的现有short int。这是         对于具有相同值的长整数,未完成

此外,

  

但是可能存在使用'is'进行短整数和比较的代码         因为这个实习而正好工作。这样的代码可能会失败         如果长期使用。)

但是,不是应该依赖的行为,因为它是特定于实现的。它不适用于较大的整数,并且不能保证实习,所以你不应该在这里使用is。 除了整数之外,字符串也可以被实习。

PEP-0237

答案 1 :(得分:0)

正如@jamylak指出的那样,你的第一个测试比较了两个列表的id,而不是它们包含的整数。如果您实际比较列表中的整数 - 例如print id(x[0]), id(y[0]) - 您可能会得到相同的id

>>> x = [1, 2, 3]
>>> y = [1, 2, 3]
>>> print id(x[0]), id(y[0])
4298179016 4298179016