嵌套的python列表赋值

时间:2012-07-09 06:47:16

标签: python

我想要做的是将嵌套列表分配给另一个列表。例如,从alist到blist。

alist = [[0], [1], [2], [3]]
blist = alist[:]
blist[0].append(1)

通过这种方式,id(alist[0])等于id(alist[1]),因此alist也会更改为[[0,1], [1], [2], [3]],这不是我想要的。

我的解决方法是:

alist = [[0], [1], [2], [3]]
blist = []
for item in alist:
    blist.append(item[:])
blist[0].append(1)

在此变通方法中,alist不会受到更改blist项目的影响。 然而,似乎没有那么pythonic,有没有更好的解决方案?这可以解决更多2级嵌套列表的深层副本。例如:alist = [[[1], 10], [[2], 20], [[3], 30]]

1 个答案:

答案 0 :(得分:7)

我认为你想使用copy.deepcopy(),这也解决了更深层次的副本:

>>> import copy
>>> alist = [[0], [1], [2], [3]]
>>> blist = copy.deepcopy(alist)
>>> blist[0].append(1)
>>> alist
[[0], [1], [2], [3]]
>>> blist
[[0, 1], [1], [2], [3]]