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,这就是你需要的:tempboard
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]]