Подтвердить что ты не робот

В чем разница между списком и списком [:] в python?

Что, если есть, есть разница между list и list[:] в python?

4b9b3361

Ответ 1

При чтении list является ссылкой на исходный список, а list[:] неглубоко копирует список.

При назначении list (re) связывает имя и list[:] slice-assigns, заменяя предыдущее в списке.

Кроме того, не используйте list в качестве имени, поскольку оно затеняет встроенный.

Ответ 2

Последний - ссылка на копию списка, а не ссылку на список. Так что это очень полезно.

>>> li = [1,2,3]
>>> li2 = li
>>> li3 = li[:]
>>> li2[0] = 0
>>> li
[0, 2, 3]
>>> li3
[1, 2, 3]

Ответ 3

Однако, если элементы списка сами представляют собой списки, даже 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.

Ответ 4

Чтобы применить первый list к переменной, вы создадите ссылку на исходный список. Второй list[i] создаст мелкую копию.

например:

foo = [1,2,3]
bar = foo
foo[0] = 4

bar и foo теперь будут:

[4,2,3]

а

foo = [1,2,3]
bar = foo[:]
foo[0] = 4
Результатом

будет:

bar == [1,2,3]
foo == [4,2,3]

: - срез.

Ответ 5

li [:] создает копию исходного списка. Но это не относится к одному и тому же объекту списка. Следовательно, вы не рискуете изменить исходный список, изменив копию, созданную ли [:].

например:

>>> list1 = [1,2,3]
>>> list2 = list1
>>> list3 = list1[:]
>>> list1[0] = 4
>>> list2
[4, 2, 3]
>>> list3
[1, 2, 3]

Здесь list2 изменяется путем изменения list1, но list3 не изменяется.