Проблема с индексами при создании двумерного массива с одинаковыми элементами

Рейтинг: 1Ответов: 1Опубликовано: 17.06.2023

При создании массива с одинаковыми элементами при изменении первого элемента, меняются и все остальные:

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 разных.