2024-06-04 20:49:24 发布
网友
例如:
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]
一位消息人士说,使用列表索引替换值[开始:停止]实际上是创建一个全新的列表,而不是简单地更新当前列表。是这样吗?在我看来这是不对的。你知道吗
没有
>>> 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对象中,而不创建新的元组。你知道吗
'a'
'b'
编辑
根据boardrider的回答,值得一提的是,如果原始列表增长过多,则可以生成新的列表,但追加、扩展等也是如此;片分配没有什么特别之处。你知道吗
我相信您的误解是因为python实际返回了一个带有list-slice actions[:]的shallow copy。但如果使用slice对列表进行任何永久性更改,它将保持为同一对象。你知道吗
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
没有
所以它还是同一个物体。
'a'
和'b'
确实被分组到一个临时元组中,然后这个元组被嵌入到现有的list对象中,而不创建新的元组。你知道吗编辑
根据boardrider的回答,值得一提的是,如果原始列表增长过多,则可以生成新的列表,但追加、扩展等也是如此;片分配没有什么特别之处。你知道吗
我相信您的误解是因为python实际返回了一个带有list-slice actions[:]的
shallow copy
。但如果使用slice对列表进行任何永久性更改,它将保持为同一对象。你知道吗示例:
有关浅复制的详细信息:https://docs.python.org/2/library/copy.html
相关问题 更多 >
编程相关推荐