当我输入以下代码时,
x=[1,2,4]
print(x)
print("x",id(x))
x=[2,5,3]
print(x)
print("x",id(x))
它给出的输出为
[1, 2, 4]
x 47606160
[2, 5, 3]
x 47578768
如果列表是可变的,那么为什么在更改列表 x 时它会给出 2 个内存地址?
原文由 amandi 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读✓ 已解决
2 回答855 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
您创建了一个 新的列表对象 并将其绑定到相同的名称
x
。您从未在开始时改变绑定到x
的现有列表对象。Python 中的名称只是引用。赋值是将名称绑定到对象。当您再次分配给
x
时,您将该引用指向另一个对象。在您的代码中,您只需创建一个全新的列表对象,然后将x
反弹到该新对象。如果你想 改变 一个列表,调用那个对象的方法:
或分配给列表的索引或切片:
演示:
我们更改了列表对象(对其进行了变异),但是该列表对象的
id()
没有改变。它仍然是同一个列表对象。也许 Ned Batchelder 关于 Python 名称和绑定的精彩演讲可以提供帮助: 关于 Python 名称和值的事实和神话。