我想知道是否有人可能知道下面的答案。Python内存序列化
我正在使用Python构建一个基于字符的后缀树。树中有超过1100万个节点,可以容纳大约3GB的内存。通过使用插槽类方法而不是Dict方法,这从7GB降低。
当我序列化树(使用最高协议)时,生成的文件小了一百多倍。
当我重新加载酸洗文件时,它又消耗了3GB的内存。这些额外开销从哪里来,是否与Pythons处理内存引用类实例有关?
更新
谢谢larsmans和Gurgeh你非常有帮助的解释和建议。我使用树作为文本语料库上信息检索界面的一部分。
我最初将孩子(最多30个)作为Numpy数组存储,然后尝试硬件版本(ctypes.py_object*30
),Python数组(ArrayType
)以及字典和Set类型。
列表似乎做得更好(使用guppy来描述内存,并__slots__['variable',...]
),但我仍然试图压扁它,如果我可以多一点。我对阵列的唯一问题是不得不事先指定它们的大小,这导致了只有一个孩子的节点有点冗余,而且我有相当多的问题。 ;-)
构建树之后,我打算用第二遍将它转换为概率树,但也可能是我可以在树构建时做到这一点。由于构建时间对我而言并不重要,因此array.array()听起来像是一些有用的尝试,感谢提示,非常感谢。
我会让你知道它是怎么回事。
我对Pickle留下了深刻的印象,甚至还有可能使用pickletools优化功能将文件大小再缩小25%。 Pickle是如此高效。 :-) – Martyn 2011-06-14 00:20:37