temp=board
не создает новую доску.Это делает ссылку на переменную temp
тем же списком, что и board
.Таким образом, изменение temp[i][j]
также меняет board[i][j]
.
Чтобы сделать копию, используйте
import copy
temp=copy.deepcopy(board)
Обратите внимание, что temp=board[:]
заставляет 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
Но это показывает, что второй список внутри 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]]