temp=board
does not make a new board. It makes the temp
variable reference the very same list as board
. So changing temp[i][j]
changes board[i][j]
too.
To make a copy, use
import copy
temp=copy.deepcopy(board)
Note that temp=board[:]
makes temp
refer to a new list (different than board
, but the contents (that is, the lists within the list) are still the same:
In [158]: board=[[1,2],[3,4]]
In [159]: temp=board[:]
Modifying temp
modifies board
too:
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
shows the object's memory address. This shows temp
and board
are different lists:
In [172]: id(temp)
Out[172]: 176446508
In [173]: id(board)
Out[173]: 178068780 # The ids don't match
But this shows the second list inside temp
is the very same list inside board
:
In [174]: id(temp[1])
Out[174]: 178827948
In [175]: id(board[1])
Out[175]: 178827948 # The ids are the same
But if you use copy.deepcopy
, then the lists within the list also get copied, which is what you need if modifying temp
is to leave board
unchanged:
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]]