Python:如何估计/计算数据结构的内存占用?
怎样估算一个对象占用的内存大小比较好呢?
反过来,怎么测量这个占用大小呢?
举个例子,假设我有一个字典,它的值是一些整数和浮点数的元组组成的列表:
d['key'] = [ (1131, 3.11e18), (9813, 2.48e19), (4991, 9.11e18) ]
我有4G的物理内存,想大致算一下在内存中可以存多少行(键:值),在开始使用交换空间之前。这是在linux/ubuntu 8.04和OS X 10.5.6上。
另外,怎样才能最好地了解我程序在内存中实际占用的大小呢?我该如何判断它什么时候快用完物理内存并开始使用交换空间?
2 个回答
10
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 的文档有点少,所以你可能需要在网页或者源代码里多找找,但它功能非常强大。还有一些文章可能会对你有帮助。