Странное поведение python
from collections import deque
a = [[5, 5], [6, 6], [7, 7]]
a.append(a[-1])
a[-1][0] += 1
print(a)
Данный код выводит [[5, 5], [6, 6], [8, 7], [8, 7]], хотя я ожидаю [[5, 5], [6, 6], [7, 7], [8, 7]]. Почему питон вместо создания новой ячейки памяти работает с ссылкой и как этого избежать?
Ответы (1 шт):
Автор решения: Андрей Коробейников
→ Ссылка
Это вполне нормальное поведение изменяемых типов в python. Конкретно в вашем примере достаточно использовать срез списка что бы избежать создания ссылки на тот же объект, и вместо этого создать новый объект.
a = [[5, 5], [6, 6], [7, 7]]
a.append(a[-1][:])
a[-1][0] += 1
# или
a.append(a[-1]*1)
# или
a.append(a[-1].copy())
print(a)
Так же у списков, словарей, множеств есть метод copy(), который создаёт копию объекта.