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