Добавить элемент списка создает дубликат - PullRequest
2 голосов
/ 26 марта 2020

У меня есть список списков, в котором я дублирую элемент списка, и если я настраиваю начальный элемент, то вновь созданный элемент также изменяется.

Это ошибка?

alfa = [[1,2,3,4],[5,6,7,8]]
alfa.append(alfa[0])
alfa[0].insert(0, 'a')

Несмотря на то, что я только вставляю 'a' в первый элемент списка alfa, это также добавляется в третий элемент.

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

Спасибо

Ответы [ 2 ]

2 голосов
/ 26 марта 2020

вы добавляете ссылку на alfa[0], поэтому любые изменения в добавленном списке будут отражены также в начальном alfa[0], вы можете исправить это, добавив в свой список alfa копию списка alfa[0]:

alfa.append(alfa[0].copy())
alfa[0].insert(0, 'a')
# [['a', 1, 2, 3, 4], [5, 6, 7, 8], [1, 2, 3, 4]]
1 голос
/ 26 марта 2020

Когда вы добавляете alfa[0] к alfa, вы добавляете ссылку на первый элемент в alfa. Итак, первый и последний элементы - это один и тот же объект. Таким образом, изменение первого или третьего элемента приведет к изменению обоих.

Вместо добавления ссылки, вам необходимо добавить новый объект, который является копией первого объекта. Пример:

alfa = [[1,2,3,4],[5,6,7,8]]
# Magic is `list()`:
alfa.append(list(alfa[0]))
alfa[0].insert(0, 'a')
# Give: [['a', 1, 2, 3, 4], [5, 6, 7, 8], [1, 2, 3, 4]]

Гораздо лучшее объяснение: Как клонировать или скопировать список?

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