2013-07-29 17 views
4

如果我有一个嵌套的字典,那么cPickle'd文件的大小比我将它加载到内存中时由python进程使用的内存小得多。 (我指的是Windows 7任务管理器中的内存列。)为什么一个小腌嵌套字典使用大量内存?

例如,一个28MB的文件似乎变成了202MB的内存。另一个155MB的文件在内存中占用1.50GB。

任何指示为什么会发生这种情况,以及如何减少通货膨胀?

这些嵌套字典只包含整数键,值可以是整数或其他嵌套整数字典。

+3

我猜这是因为pickle文件只包含存储的实际数据,而在运行时python会为每个字典分配一个散列表,这需要超出实际数据所需的内存。 –

+1

根据您的数据,您可能能够使用列表(如果每个级别的密钥集合是或多或少连续的)或二叉树 - 或者会减少内存使用,导致插入和查找操作变慢。 –

+0

也许你可以提供更多关于字典内容的具体信息?当然,不要在这里粘贴28MB,但是你可以更准确地描述它,然后是“嵌套”吗?也许有些样品带有“...”。 – towi

回答

1

您可能会考虑给objgraph一个尝试:它允许您检查程序内存中发生了什么;它也可以生成视觉输出。

查看http://mg.pov.lt/objgraph/了解更多信息。