为什么另一个列表的索引分配形成链表并且列表切片(一个元素切片)另一个列表的分配使得切片和索引元素指向相同元素时列表是原始列表的一部分?内存分配发生了什么变化?
l = [1,2,3,4,5,6]
l[2:3] = [7,8] # gives [1,2,7,8,5,6]
# whereas:
l[2] = [7,8] # gives [1,2,[7,8],4,5,6]
并初始l[2]=3
和l[2:3]=3
答案 0 :(得分:1)
当你说" initialy l [2] = 3而l [2:3] = 3" 时,你的假设是不正确的。
实际上就是这样:
l = [1, 2, 3, 4, 5, 6]
l[2] # 3
l[2:3] # [3]
l[2]
是索引2处的元素。
l[2:3]
是从索引2开始的长度为1的切片(子列表)。
因此,分配给l[2]
更改为元素并分配给l[2:3]
会将切片替换为另一个切片,完全如您所注意到的那样:
l = [1, 2, 3, 4, 5, 6]
l[2:3] = [7,8] # l is now [1, 2, 7, 8, 4, 5, 6]
l = [1, 2, 3, 4, 5, 6]
l[2] = [7,8] # l is now [1, 2, [7, 8], 4, 5, 6]