temp=board
不做一个新的董事会。它使temp
变量引用的列表与board
. 所以改变temp[i][j]
也改变board[i][j]
。
要制作副本,请使用
import copy
temp=copy.deepcopy(board)
请注意,temp=board[:]
maketemp
引用了一个新列表(不同于board
,但内容(即列表中的列表)仍然相同:
In [158]: board=[[1,2],[3,4]]
In [159]: temp=board[:]
修改也temp
修改board
:
In [161]: temp[1][0]=100
In [162]: temp
Out[162]: [[1, 2], [100, 4]]
In [163]: board
Out[163]: [[1, 2], [100, 4]]
id
显示对象的内存地址。这显示temp
并且board
是不同的列表:
In [172]: id(temp)
Out[172]: 176446508
In [173]: id(board)
Out[173]: 178068780 # The ids don't match
但这表明里面的第二个列表与里面temp
的列表完全相同board
:
In [174]: id(temp[1])
Out[174]: 178827948
In [175]: id(board[1])
Out[175]: 178827948 # The ids are the same
但是如果你使用,那么列表中的列表也会被复制,如果修改是保持不变copy.deepcopy
,这就是你需要的:temp
board
In [164]: import copy
In [165]: board=[[1,2],[3,4]]
In [166]: temp=copy.deepcopy(board)
In [167]: temp[1][0]=100
In [168]: temp
Out[168]: [[1, 2], [100, 4]]
In [169]: board
Out[169]: [[1, 2], [3, 4]]