Разница создания матрицы
matrix = [[0 * n] * n
Почему когда создаю матрицу таким способом matric = [[0 * n] * n
при замене одного из индексов в списке, в других списках этот же индекс меняется, я слышал, что там работает ссылочный метод вроде, но хочу почитать почему так работает.
И когда создаю через matric = [[0 for _ in range(n)] for _ in range(n)]
, всё нормально работает. Почему это работает именно так?
Ответы (1 шт):
Дело в том, что список - это ссылочный тип данных, и в matrix
на самом деле содержится не n списков, а n копий одного и того же списка.
Ссылка в программировании — это объект, указывающий на определённые данные, но не хранящий их. Получение объекта по ссылке называется разыменованием.
n = 10
a = [0 for _ in range(n)]
b = [0 for _ in range(n)]
print(a is b) # False, это разные списки
a = [0 for _ in range(n)]
b = a
print(a is b) # True, это один список
Правильный способ создания двумерного списка:
matrix = [[0] * n for _ in range(n)]
matrix = [[0 for _ in range(n)] for _ in range(n)]