python:为什么是id(x)!= id(y)当x和y是具有相等值的列表时?

时间:2017-01-16 20:11:05

标签: python

为什么id(a)== id(b)而id(x)!= id(y)在下面的例子中:

>>> a = 9
>>> b = 9
>>> id(a)
10901176
>>> id (b)
10901176
>>> id(a) == id(b)
True
>>> x = [1, 2, 3]
>>> y = [1, 2, 3]
>>> id(x) != id(y)
True
>>> id(x)
11428848
>>> id(y)
12943768

从python 3.6 doc我得到id()“返回一个对象的”身份“。这是一个整数,在它的生命周期内保证对于该对象是唯一的和常量的。两个具有非重叠生命期的对象可能有相同的id()值。“......但这并没有向我解释。有什么想法吗?

1 个答案:

答案 0 :(得分:4)

ab整数具有相同id的事实只是python对不可变对象执行的存储优化(不能依赖它,例如:如果数字足够大,{ {1}} s可以不同)

尝试更改id的值,您会看到b更改。

当然,列表有所不同:无法从存储优化中受益,因为它们是可变的:当您更改id(b)时,您不希望更改x