当转换为迭代器对象时,具有范围的列表文字的内存会发生什么?

问题描述 投票:0回答:1

我想知道 CODE 2 是否需要 41880+ 的内存空间,因为我“创建”了一个列表......但也许不是因为我没有将它存储在变量中?

也就是说,CODE 1 和 CODE 2 占用的内存空间相似吗?

# CODE 1
my_list = [l for l in range(5000)] # I occupied big space here (41880)
my_iter1 = iter(my_list)
# CODE 2
my_iter2 = iter([i for i in range(5000)]) # did I occupy big space here too?
python python-3.x memory iterator iterable
1个回答
0
投票

总体来说,差别不大

variable = expression
function(variable)

function(expression)

由于Python不是“惰性”语言,它们都必须完全计算表达式的值,这意味着为该值分配所有内存。

唯一的区别是,在第二个版本中,函数返回后,表达式值的内存将变成垃圾(除非函数将其保存在某个地方)。在第一个版本中,直到重新分配或删除变量之前它不会变成垃圾(如果此代码位于函数中,则当函数结束时会自动发生)。

© www.soinside.com 2019 - 2024. All rights reserved.