You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含range的列表字面量转迭代器时的内存情况及两段代码内存占用对比

内存占用对比:CODE 1 vs CODE 2

先直接给结论:

  • CODE 2会在创建列表的瞬时占用和CODE 1中列表相近的内存(也就是你说的41880左右),但这个列表会很快被Python垃圾回收机制回收;而CODE 1的列表会被变量my_list持续引用,一直占用内存。两者的长期内存占用差异很大。

详细拆解:

  1. CODE 1的内存行为
    创建列表[l for l in range(5000)]并赋值给my_list后,这个包含5000个元素的列表会一直驻留在内存中(只要my_list还在当前作用域内)。iter(my_list)只是创建了一个迭代器对象,迭代器本身只保存迭代状态,占用的内存可以忽略不计,主要内存消耗来自my_list指向的列表。

  2. CODE 2的内存行为
    执行iter([i for i in range(5000)])时,Python会先创建完整的5000元素列表(此时内存占用和CODE 1创建列表后一致),再基于这个列表生成迭代器my_iter2。但因为这个列表没有被任何变量引用,Python的垃圾回收器会在这行代码执行完成后很快回收这个列表的内存,最终只有my_iter2这个轻量迭代器占用少量内存。

优化建议:避免创建大列表

如果想彻底避免大列表的内存占用,应该直接使用生成器表达式,而不是列表推导式:

my_iter3 = iter(i for i in range(5000))  # 不会生成完整列表,内存占用极低

生成器表达式是按需生成元素,每次迭代才生成一个值,不会一次性把所有元素加载到内存中,这才是真正节省内存的写法。

内容的提问来源于stack exchange,提问作者dungarian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 20:33:23