在不影响原始列表的情况下交换复制列表中的列表元素



我有一个列表a和一个列表b,它(应该)是列表a的副本。

a = [[['a'], ['b'], ['c']], [['A'], ['B'], ['C']]]
b = a[:][:]
b[0][1], b[0][2] = b[0][2], b[0][1]

如果我现在看看ab,我得到以下结果:

a = [[['a'], ['c'], ['b']], [['A'], ['B'], ['C']]]
b = [[['a'], ['c'], ['b']], [['A'], ['B'], ['C']]]

为什么列表b中的交换也会影响原始列表a ?

谢谢。

b = a[:][:]只是b = (a[:])[:]或原始列表副本的副本。原始列表中的列表仍然被引用,当您更改它们时,它会显示在两个列表中。

你可以做

b = [l[:] for l in a] # a new list, consisting of copies each sublist

from copy import deepcopy
b = deepcopy(a)
import copy
a = [[['a'], ['b'], ['c']], [['A'], ['B'], ['C']]]
b = copy.deepcopy(a)
b[0][1], b[0][2] = b[0][2], b[0][1]
print a, b

最新更新