Инициализация матрицы в Python с использованием «[[0] * x] * y» создает связанные строки? - PullRequest
3 голосов
/ 12 марта 2012

Инициализация матрицы так, как кажется, связывает строки так, что при изменении одной строки все они изменяются:

>>> grid = [[0]*5]*5
>>> grid
[[0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0],
 [0, 0, 0, 0, 0]]
>>> grid[2][2] = 1
>>> grid
[[0, 0, 1, 0, 0],
 [0, 0, 1, 0, 0],
 [0, 0, 1, 0, 0],
 [0, 0, 1, 0, 0],
 [0, 0, 1, 0, 0]]

Как мне этого избежать?

1 Ответ

8 голосов
/ 12 марта 2012
grid = [[0]*5 for i in range(5)]

Примечание: [int] * 5 копирует int 5 раз (но когда вы копируете int, вы просто копируете значение).[список] * 5 копирует ссылку на один и тот же список 5 раз.(когда вы копируете список, вы копируете ссылку, которая указывает на список в памяти).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...