例如:
temp = list(range(1, 11))
print(temp)
>>>[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
temp[3:5] = 'a', 'b'
print(temp)
>>>[1, 2, 3, 'a', 'b', 6, 7, 8, 9, 10]
一位消息人士表示,使用列表索引[start:stop]替换值实际上会创建一个全新的列表,而不是简单地更新当前列表。是这样的吗?这对我来说似乎不正确。
答案 0 :(得分:2)
它没有。
>>> x = [1, 2, 3, 4, 5]
>>> id(x)
36789896L
>>> x[1:4] = 'a', 'b'
>>> x
[1, 'a', 'b', 5]
>>> id(x)
36789896L
所以它仍然是同一个对象。 'a'
和'b'
确实被分组为一个临时元组,然后嵌入到现有列表对象中而不创建新元组。
修改强>
根据董事会成员的回答,如果原始列表增长太多,值得一提的是可以会产生一个新列表,但是这也是如此追加,延伸等;切片分配没什么特别的。
答案 1 :(得分:0)
我相信你的误解是由于python实际上返回了shallow copy
列表切片操作[:]。但是如果使用切片对列表进行任何永久性更改,它将保持为同一个对象。
示例:
tmp = list(range(1,11))
id(tmp)
>>> 6591232
print(tmp[::-2])
[10, 8, 6, 4, 2]
id(tmp)
>>> 6591232
print(tmp)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
有关浅拷贝的更多信息:https://docs.python.org/2/library/copy.html