使用Python中的切片使用索引的问题

时间:2016-07-06 17:45:19

标签: python python-2.7

我正在使用python 2.7.6并尝试使用以下代码,

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

1 个答案:

答案 0 :(得分:0)

因为切片会创建原始列表的浅表副本。有关浅层和深层复制的更多详细信息,请参阅此answer。 简单来说,当你做

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

解释器使用list的第3,第4和第5个元素创建一个新的mylist1对象。然后它将字符串"C5"分配给它的第一个元素,因为没有对刚刚创建的新列表对象的引用,它会被垃圾收集,原始的mylist1保持不变。