Python列出了ID

时间:2014-04-14 18:52:38

标签: python list

为什么id在下面的代码中有x更改,但它仍然具有相同的值。我希望x和z的id在这种情况下应该是相同的,因为最后值保持不变。

>>> x = [1, 2, 3]
>>> z = x
>>> id(z) == id(x)
True
>>> x = [1, 2, 3]
>>> id(z) == id(x)
False
>>> x
[1, 2, 3]
>>> z
[1, 2, 3]
>>> 

2 个答案:

答案 0 :(得分:3)

对象的含义与其身份无关。 id(x) == id(y)当且仅当xy都引用同一个对象。

也许这个例子有帮助:

x = [1, 2, 3]
y = [1, 2, 3]
z = y
print x, y, z
y[0] = 1000
print x, y, z

打印出来:

[1, 2, 3] [1, 2, 3] [1, 2, 3]
[1, 2, 3] [1000, 2, 3] [1000, 2, 3]

y和z都指向同一个对象,因此修改一个变量也会修改另一个变量检索的值。 x保持不变,因为它是一个单独的对象。

您不应该忘记的是,使用文字列表(如[1, 2, 3])初始化变量会创建一个新的列表对象。

答案 1 :(得分:0)

这两个列表是否包含相同的元素并不意味着它们应该具有相同的id

如果两个变量引用相同的对象,则它们只有相同的id,而第二个zx不会:

>>> x = [1, 2, 3]
>>> z = [1, 2, 3]
>>> x[0] = 999
>>> x
[999, 2, 3]
>>> z
[1, 2, 3]

这表明xz是两个截然不同的无关列表。