2016-07-06 5 views
0

Я использую Python 2.7.6 и попытался следующий код,Проблема при помощи индекса с Нарезка в Python

mylist1=["A1","A2","A3","A4","A5","A6","A7"] 
print mylist1 #prints ['A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7'] 
mylist1[2:5]=["B3","B4","B5"] 
print mylist1 #prints ['A1', 'A2', 'B3', 'B4', 'B5', 'A6', 'A7'] 
print mylist1[2:3][0] #prints B3 
mylist1[2:5][0]="C5" 
print mylist1 #prints ['A1', 'A2', 'B3', 'B4', 'B4', 'A6', 'A7'] 

Я могу изменить список mylist1 с помощью mylist1[2:5]=["B3","B4","B5"]

Но почему заявление mylist1[2:5][0]="C5" не меняющийся список mylist1?

+0

Связанный http://stackoverflow.com/questions/10155951/what-is-the-difference-between-slice-assignment-that-slices-the-whole-list-and-d – Kasramvd

ответ

0

Поскольку нарезка создает мелкую копию исходного списка. См. Это answer для получения более подробной информации о мелкой и глубокой копии. Проще говоря, когда вы делаете

mylist1[2:5][0]="C5" 

интерпретатор создает новый list объект с 3-го, 4-го и 5-го элемента mylist1. Затем он назначает строку "C5" своему первому элементу и потому что нет ссылки на новый только что созданный объект списка, он получает сбор мусора, оставляя исходный mylist1 неповрежденным.

Смежные вопросы