2009-04-14 78 views
12

估計對象的內存佔用情況的好方法是什麼?Python:如何估計/計算數據結構的內存佔用量?

相反,什麼是測量足跡的好方法?

例如,說我有一本字典,其值是整數列表,浮元組:

d['key'] = [ (1131, 3.11e18), (9813, 2.48e19), (4991, 9.11e18) ] 

我的物理內存4G,想弄清楚大約有多少行(鍵:值)在我進入交換之前,我可以保存在內存中。這是在linux/ubuntu 8.04和OS X 10.5.6上。

此外,找出程序的實際內存佔用空間的最佳方法是什麼?當耗盡物理記憶和溢出時,我如何最好地弄清楚?

回答

9

Guppy有一個很好的內存分析器(Heapy):

>>> from guppy import hpy 
>>> hp = hpy() 
>>> hp.setrelheap() # ignore all existing objects 
>>> d = {} 
>>> d['key'] = [ (1131, 3.11e18), (9813, 2.48e19), (4991, 9.11e18) ] 
>>> hp.heap() 
Partition of a set of 24 objects. Total size = 1464 bytes. 
Index Count %  Size % Cumulative % Kind (class/dict of class) 
    0  2 8  676 46  676 46 types.FrameType 
    1  6 25  220 15  896 61 str 
    2  6 25  184 13  1080 74 tuple 
... 

Heapy有點未公開,所以你可能通過網頁或源代碼一點挖,但它的功能非常強大。也有一些articles這可能是相關的。

+1

爲什麼'd'中有6個'str'對象? – 2011-02-25 06:45:27

5

您可以用內存設置,其中有一對夫婦,我知道做到這一點:

  1. PySizer - poissibly過時,作爲主頁現在建議:

  2. Heapy

這可能是this問題的副本。