【发布时间】:2013-06-10 09:12:08
【问题描述】:
就在我以为我已经了解 Python 列表的工作原理时......
>>> a = [1,2,3]
>>> b = a[:]
>>> b
[1,2,3]
>>> b[1]=100
>>> b
[1,100,3]
>>> a
[1,2,3]
到目前为止,一切都很好。我正在用 a 的内容初始化 b,以便 b 指向不同的对象。因此,b 的变化不会影响 a。
现在看看另一个例子:
>>> a = [[1,2,3],[4,5,6],[7,8,9]]
>>> b = a[:][:]
>>> b
[[1,2,3],[4,5,6],[7,8,9]]
>>> b[1][1] = 100
>>> b
[[1,2,3],[4,100,6],[7,8,9]]
>>> a
[[1,2,3],[4,100,6],[7,8,9]]
为什么这次b的变化影响了a?与前面的例子有什么不同?
【问题讨论】:
-
请注意,使用
[:]进行复制有点神秘 - 通常我发现使用list()或copy.copy()会更好,具体取决于上下文。 (当然,正如答案中所指出的,copy.deepcopy()可能是您想要的)。