当列表中的多个值被替换时会发生什么?

2024-06-04 20:49:24 发布

您现在位置:Python中文网/ 问答频道 /正文

例如:

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]

一位消息人士说,使用列表索引替换值[开始:停止]实际上是创建一个全新的列表,而不是简单地更新当前列表。是这样吗?在我看来这是不对的。你知道吗


Tags: 列表rangetemplistprint消息人士
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'确实被分组到一个临时元组中,然后这个元组被嵌入到现有的list对象中,而不创建新的元组。你知道吗

编辑

根据boardrider的回答,值得一提的是,如果原始列表增长过多,则可以生成新的列表,但追加、扩展等也是如此;片分配没有什么特别之处。你知道吗

我相信您的误解是因为python实际返回了一个带有list-slice actions[:]的shallow copy。但如果使用slice对列表进行任何永久性更改,它将保持为同一对象。你知道吗

示例:

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

相关问题 更多 >