1

我目前正在为我的最终项目比较生成器表达式和列表理解,并且在此过程中想比较它们的内存占用。(注意:我阅读了这篇文章,但无法回答我将向您提出的问题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给我正确的生成器值(毕竟这看起来很现实)。

4

0 回答 0