我正在使用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
?
答案 0 :(得分:0)
因为切片会创建原始列表的浅表副本。有关浅层和深层复制的更多详细信息,请参阅此answer。 简单来说,当你做
时mylist1[2:5][0]="C5"
解释器使用list
的第3,第4和第5个元素创建一个新的mylist1
对象。然后它将字符串"C5"
分配给它的第一个元素,因为没有对刚刚创建的新列表对象的引用,它会被垃圾收集,原始的mylist1
保持不变。