我目前正在为我的最终项目比较生成器表达式和列表理解,并且在此过程中想比较它们的内存占用。(注意:我阅读了这篇文章,但无法回答我将向您提出的问题How do I determine the size of an object in Python?)我首先为每种类型的结构定义了两个任意实例:
a = [i for i in range(10)]
b = (i for i in range(10))
现在我首先尝试分析它们的长度sys.getsizeof
,得到 192a
和 88 b
(以及 48 为空白range(10)
)。
我不是 100% 确定sys.getsizeof
包含range
-instance,因为它可能只是由生成器表达式实例引用,而 afaik 引用不计入getsizeof
,所以我也尝试调用pympler.asizeof.asizeof
这两个实例,产生 504 的a
,48 的纯range(10)
而奇怪的 0 为b
. 求助于 pympler 文档,我注意到有一个ignored
参数asizeof
忽略了某些类型。我又试了一次,ignored=False
但得到了完全相同的结果。
我想知道的是为什么生成器表达式的大小为 0 到asizeof
以及我是否可以依靠sys.getsizeof
给我正确的生成器值(毕竟这看起来很现实)。