在列表中替换多个值时会发生什么?

时间:2015-06-25 23:02:09

标签: python python-3.x

例如:

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]替换值实际上会创建一个全新的列表,而不是简单地更新当前列表。是这样的吗?这对我来说似乎不正确。

2 个答案:

答案 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