Я знаю разницу в a[:] и a при назначении переменной, а также особый случай назначения среза.

Предположим ,

a=[1,2,3,4,5]  

В чем разница между следующими двумя утверждениями?

b=a[:]+[6,7,8,9,10] #1   
b=a+[6,7,8,9,10] #2  

В обоих случаях оба a и b имеют одинаковые значения в конце.

Я сослался на следующие ссылки -

Когда и зачем использовать [:] в python

Понимание обозначения срезов

Python, почему вы используете [:] over =

Они не упомянули свою разницу в выражении как таковом.

2
DoubtExpert 27 Июн 2019 в 09:57

2 ответа

Лучший ответ

a[:] получает полный фрагмент списка - в этом контексте он не имеет различий в действии, так как вы назначаете новый список (хотя он и копирует список, поэтому он медленнее масштабируется).

# create the list.
>>> a = [1, 2, 3, 4, 5]
# see its address
>>> id(a)
4349194440
# see the (different) address of a copy
>>> id(a[:])
4350338120
# reassign the entire list using slice syntax
>>> a[:] = [5, 6, 7]
>>> a
[5, 6, 7]
# still the same first ID though
>>> id(a)
4349194440
>>>
5
AKX 27 Июн 2019 в 07:00

В списках Python срезы a[:] и a имеют только различия в их идентификаторах, поскольку a[:] делает точную копию a в другом месте адреса.

Также учитывая неизменяемость среза строки Python a[:] и a не имеют различий. Оба указывают на одно и то же местоположение адреса.

0
Arun Augustine 27 Июн 2019 в 07:08