a = [[0, 1, 2],[-1, 0, 1],[-2, -1, 0]]
m = a[:]
m[1][1] = 'x'
print(m,a)
结果是:
[[0, 1, 2], [-1, 'x', 1], [-2, -1, 0]] [[0, 1, 2], [-1, 'x', 1], [-2, -1, 0]]
怎么来的??? m应该是a的副本。我尝试了id(a)
和id(m)
,但他们都显示了不同的结果。但它仍然是这样的结果。我的编译器可能有问题吗?请指教。
P.S。在发布此问题之前,我已阅读过所提及的帖子。我知道如何复制/克隆列表。直到今天,通常我都没有遇到任何问题。也许为了澄清我的问题,它不是如何纠正它(因为我已经解决它以获得正确的结果),但为什么代码表现得像理论上m = a [:]会导致与a具有相同值的新列表,而不仅仅是将相同的列表引用为。
P.P.S。对不起,我再次阅读了上面提到的帖子,我在那里找到了答案:[:]不适用于嵌套列表。我没有完全理解/理解术语“嵌套列表”#39;在第一时间阅读(英语不是我的母语)。案件结案。感谢。
答案 0 :(得分:1)
编译器是对的。
如果您选中id(m[1])
和id(a[1])
,您可能会发现它们引用同一个对象。
我认为原因是列表a
和m
只存储对其他对象的引用,类似C++
中的指针。
当我们考虑使用list
复制slicing
时,我应该说这是一个值得注意的案例。非常好的例子!