>>> 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 在被赋予相同的值后是否相同?
小整数正在被拘留。
具有小值(通常介于 -1 和 99 之间)的短整数是“内嵌的”——只要结果具有这样的值,就会返回具有相同值的现有短整数。这 不适用于具有相同值的长整数。
更远,
但是可能存在使用“is”来比较短整数的代码,并且由于这种实习而恰好可以工作。如果与长整数一起使用,此类代码可能会失败。)
但是,这不是应该依赖的行为,因为它是特定于实现的。它不适用于更大的整数并且不能保证实习,所以你不应该is
在这里使用。除了整数之外,字符串也可以被实习。
( PEP-0237 )
正如@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