@Kryptonit

Некорректное заполнение двумерного списка Python?

Я объявляю динамический список M*N, пусть M =2, N =2
Elements = [[0]*M]*N
Мне необходимо на место определённого элемента поставить определённое значение, но элемент тоже вводится динамически, поэтому я могу проитерироваться через for:
for i in range(M):
for j in range(N):
if i == 0 and j == 0:
Elements[i][j] = 1000
print(Elements)
Я жду что выведет [[1000,0], [0,0]]
А-н нет [[1000,0],[1000,0]]
  • Вопрос задан
  • 70 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
Вы немного неправильно создали список. При умножении, Вы получили не новый список, а ссылку на первый. Изменили первый список - изменили второй. Можно проверить через id()

Elements = [[0]*M]*N
print(id(Elements[0]) == id(Elements[1]))


Правильным вариантом будет нечто подобное:
Elements = [[0]*M for i in range(N)]
print(id(Elements[0]) == id(Elements[1]))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы