为什么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]
>>>
答案 0 :(得分:3)
对象的含义与其身份无关。 id(x) == id(y)
当且仅当x
和y
都引用同一个对象。
也许这个例子有帮助:
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
,而第二个z
和x
不会:
>>> x = [1, 2, 3]
>>> z = [1, 2, 3]
>>> x[0] = 999
>>> x
[999, 2, 3]
>>> z
[1, 2, 3]
这表明x
和z
是两个截然不同的无关列表。