Проблема с индексами при создании двумерного массива с одинаковыми элементами
При создании массива с одинаковыми элементами при изменении первого элемента, меняются и все остальные:
a = [[0]]*3
a[0][0] = 1010
print(a)
выводит [[1010], [1010], [1010]]
Но если это сделать другим способом:
a = [[0] for i in range(3)]
a[0][0] = 1010
print(a)
выводит [[1010], [0], [0]]
Почему так?
Ответы (1 шт):
Дело в том, что в первом случае вы создаете массив, каждый элемент которого ссылается на один и тот же обьект в памяти компьютера, поэтому изменяя любой из элементов, остальные тоже изменяются.
Во втором случае массив создается последовательно, сначала создается первой подсписок, потом второй и потом третий, соответственно это 3 разных обьекта в памяти компьютера, и изменение одного из них не влияет на остальные элементы.
Вы можете посмотреть, на какие объекты в памяти ссылаются подсписки в обоих случаях, добавив этот код, после создания списка а:
for sublist in a:
print(id(sublist))
В первом случае он выдаст 3 одинаковых id, а во втором-3 разных.