【发布时间】:2021-11-10 14:46:48
【问题描述】:
当我做类似的事情时
for elem in A[a:b]:
something(elem)
发生了什么? python是在内存中的某个地方复制我的数组,还是只是在选定的位置开始和结束?就内存使用而言,这是否与以下示例中使用 range() 相同?
for i in range(a,b):
something(A[i])
【问题讨论】:
-
对序列进行切片会返回它的副本——事实上,写
seq[:]是一种快速而简单的复制序列的方式。 -
如果
A是一个列表,那么A[a:b]正在创建一个包含A指定切片的新列表。它与使用范围不同。 -
@arthll 定义“更好” - 处理速度?内存使用情况?代码整洁?
-
这能回答你的问题吗? Does a slicing operation give me a deep or shallow copy? TL;DR 是的,它会复制列表
-
@arthll 这是一个全新的列表。列表实际上并不包含它们的对象,只是对它们的引用。需要明确的是,
for上下文不会改变任何东西。不客气!
标签: python