Python pympler.asizeof.asizeof为生成器表达式返回0

时间:2018-12-02 12:54:10

标签: python sys generator-expression

我目前正在为最终项目比较生成器表达式和列表理解,并且在此过程中希望比较它们的内存占用量。 (抬头:我读了这篇文章,但无法回答我将向您提出的问题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分析它们的长度,这样a的输出为192,b的输出为88(空白range(10)的输出为48)。

我不确定100%sys.getsizeof是否包含range实例,因为生成器expression-instance可能只是引用了该实例,而getsizeof中没有计算afaik引用,因此我还尝试为这两个实例调用pympler.asizeof.asizeof,对于a来说,它会产生504,对于纯range(10)来说,它会产生48,而对于b来说,它会产生0。 借助于pympler文档,我注意到ignored有一个asizeof参数,它忽略了某些类型。我用ignored=False再试一次,但结果完全一样。

我想知道的是为什么generator-expressions的大小为0到asizeof,并且如果我可以依靠sys.getsizeof来给我Generator的正确值(似乎毕竟是现实的。

0 个答案:

没有答案