4

私がやりたいのは、ネストされたリストを別のリストに割り当てることです。たとえば、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]]

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 に答える