3

list1、別のlist2に追加したいので、list2を変更し、もう一度list1に追加しますが、list1の値が上書きされます。

[:]は追加で使用し、問題なく動作します:

list1=[1,2]
list2=[]

list2.append(list1[:])

list1[0]=20

print list1, list2 # [20, 2] [[1, 2]]

しかし、問題は、リストに別のリストが含まれている場合です

list1=[[2,1],[2]] 
list2=[]

list2.append(list1[:])

print list1, list2  #[[2, 1], [2]] [[[2, 1], [2]]]

list1[0][0]=25

list2.append(list1)

print list1, list2  #[[25, 1], [2]] [[[**25**, 1], [2]], [[25, 1], [2]]]

最後のプリントは[[25, 1], [2]] [[[2, 1], [2]], [[25, 1], [2]]]

4

2 に答える 2

3

私はあなたが求めているのは:

from copy import deepcopy
list1.append(deepcopy(list2))
于 2012-11-23T12:24:44.820 に答える
0

list1が指すリストとまったく同じ内容の新しいオブジェクトを作成し、lisT1このコピーを指すようにすることをお勧めします。このように、list1(またはlist1が指すもの)を変更しても、lisT1(またはlisT1が指すもの)は変更されません。例えば ​​:

>>> list1=[[2,1],[2]]
>>> list2=[]
>>> lisT1 = [[2,1],[2]]
>>> list2.append(lisT1[:])
>>> print (list1, list2)
[[2, 1], [2]] [[[2, 1], [2]]]
>>> list1[0][0]=25
>>> list2.append(list1)
>>> print (list1, list2)
[[25, 1], [2]] [[[2, 1], [2]], [[25, 1], [2]]]
于 2012-11-23T16:31:49.373 に答える