4

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

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

这样,id(alist[0])equals 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]]

4

1 回答 1

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]]
于 2012-07-09T06:51:06.140 回答