我想知道是否有人可能知道下面的答案。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