temp=board
新しいボードを作成しません。変数参照をtemp
とまったく同じリストにしboard
ます。だから変わることもtemp[i][j]
変わるboard[i][j]
。
コピーを作成するには、
import copy
temp=copy.deepcopy(board)
temp=board[:]
make は新しいリストを参照することに注意してtemp
ください ( とは異なります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
しかし、これは内部の2番目のリストが内部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]]