Python:在复制列表中交换列表元素而不影响原始列表

时间:2011-10-27 23:13:29

标签: python list multidimensional-array

我有一个列表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

谢谢。

2 个答案:

答案 0 :(得分:3)

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)

答案 1 :(得分:0)

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