Python:如何估计/计算数据结构的内存占用?

15 投票
2 回答
4432 浏览
提问于 2025-04-15 11:07

怎样估算一个对象占用的内存大小比较好呢?

反过来,怎么测量这个占用大小呢?

举个例子,假设我有一个字典,它的值是一些整数和浮点数的元组组成的列表:

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

我有4G的物理内存,想大致算一下在内存中可以存多少行(键:值),在开始使用交换空间之前。这是在linux/ubuntu 8.04和OS X 10.5.6上。

另外,怎样才能最好地了解我程序在内存中实际占用的大小呢?我该如何判断它什么时候快用完物理内存并开始使用交换空间?

2 个回答

5

你可以使用内存分析工具来做到这一点,我知道有几个这样的工具:

  1. PySizer - 可能已经过时,因为它的主页现在推荐:

  2. Heapy

这可能和这个问题重复。

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 的文档有点少,所以你可能需要在网页或者源代码里多找找,但它功能非常强大。还有一些文章可能会对你有帮助。

撰写回答