0
>>> 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 在被赋予相同的值后是否相同?

4

2 回答 2

0

小整数正在被拘留

具有小值(通常介于 -1 和 99 之间)的短整数是“内嵌的”——只要结果具有这样的值,就会返回具有相同值的现有短整数。这 不适用于具有相同值的长整数。

更远,

但是可能存在使用“is”来比较短整数的代码,并且由于这种实习而恰好可以工作。如果与长整数一起使用,此类代码可能会失败。)

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

( PEP-0237 )

于 2013-06-16T04:02:24.717 回答
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
于 2013-06-16T04:05:59.690 回答