Однако, если элементы списка сами являются списками, даже у list1 = list[:]
есть свои проблемы. Рассмотрим:
>>> a = [[1,2,3],[4,5,6],[7,8,9]]
>>> b = a[:]
>>> b[0].remove(2)
>>> b
[[1, 3], [4, 5, 6], [7, 8, 9]]
>>> a
[[1, 3], [4, 5, 6], [7, 8, 9]]
Это происходит потому, что каждый элемент списка, копируемый в b, является самим списком, и при этом копировании списков возникает та же проблема, что и в обычном list1 = list2
.
Самый короткий выход , который я нашел , - это явное копирование каждого элемента списка следующим образом:
>>> a = [[1,2,3],[4,5,6],[7,8,9]]
>>> b=[[j for j in i] for i in a]
>>> b
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
>>> b[0].remove(2)
>>> b
[[1, 3], [4, 5, 6], [7, 8, 9]]
>>> a
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
Конечно, для каждой дополнительной степени вложения во вложенном списке код копирования углубляется дополнительным встроенным циклом for
.