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

Python生成器内存占用差异疑问:为何部分生成器多占8字节?

Python生成器内存占用差异的原因

测试代码与输出

代码示例

import sys

num_gen = (num for num in range(1))
print(sys.getsizeof(num_gen))
num_gen = (num for num in range(100))
print(sys.getsizeof(num_gen))

num_gen = (num+1 for num in range(100))
print(sys.getsizeof(num_gen))
num_gen = (num+1+1 for num in range(100))
print(sys.getsizeof(num_gen))
num_gen = (num+num for num in range(100))
print(sys.getsizeof(num_gen))
num_gen = (num+num+1 for num in range(100))
print(sys.getsizeof(num_gen))

运行输出

200
200
208
208
208
208

差异原因

核心原因在于生成器表达式是否需要存储自由变量:

  • 前两个生成器(num for num in range(...))中,num是生成器内部的迭代变量,不属于外部作用域的自由变量,生成器对象无需额外分配空间存储引用信息。
  • 后面四个生成器的表达式(如num+1、num+num)中,Python的字节码会将num识别为需要引用的自由变量,生成器对象必须额外分配内存来存储这个引用。在64位系统中,一个指针的大小为8字节,这就导致内存占用比前两个生成器多了8字节。

直白点说:当生成器表达式仅直接返回迭代变量时,Python会优化掉自由变量的存储逻辑;一旦表达式包含对迭代变量的运算操作,就会触发自由变量存储机制,进而增加8字节内存占用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:39:56