2011-10-27 20 views
3

我有一个列表a和列表b,它是(应该是)列表a的副本。Python:复制列表中的交换列表元素而不影响原始列表

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

谢谢。

+0

可能重复的http://stackoverflow.com/q/1601269/589206 – hochl

+0

我想'B = A [:] [:]'可以写成'b = a [:]' – sehe

回答

2

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) 
+0

谢谢,它现在可用! – verbit

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