3

我记得读到很难确定 Python 中对象的确切内存使用情况。但是,该线程是从 2009 年开始的,从那时起我已经阅读了 Python 中的各种内存分析器(请参阅此线程中的示例)。另外,IPython 近几个月已经成熟了很多(1.0 版本前几天发布)

IPython 已经有一个叫做 的魔法 whos,它打印变量名、它们的类型和一些基本的数据/信息。

以类似的方式,有没有办法获得每个返回的对象的内存大小who ?IPython 中是否有任何可用于此目的的实用程序?

使用孔雀鱼

Guppy (在此线程中建议)有一个命令,允许获取每个对象类型的累积内存使用量,但不幸的是:

  1. 它不显示每个对象的内存使用情况
  2. 它以字节为单位打印大小(不是人类可读的格式)

对于第二个,可能可以bytes2human从此答案申请,但我需要首先以h.heap()我可以解析的格式收集输出。

但是对于第一个(最重要的),有没有办法让 Guppy 显示每个对象的内存使用情况?

In [6]: import guppy

In [7]: h = guppy.hpy()                                                                                                                                     

In [8]: h.heap()
Out[8]: 
Partition of a set of 2871824 objects. Total size = 359064216 bytes.
 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
     0 522453  18 151469304  42 151469304  42 dict (no owner)
     1 451503  16 36120240  10 187589544  52 numpy.ndarray
     2 425700  15 34056000   9 221645544  62 sklearn.grid_search._CVScoreTuple
     3 193439   7 26904688   7 248550232  69 unicode
     4 191061   7 22696072   6 271246304  76 str
     5 751128  26 18027072   5 289273376  81 numpy.float64
     6  31160   1 12235584   3 301508960  84 list
     7 106035   4  9441640   3 310950600  87 tuple
     8   3300   0  7260000   2 318210600  89 dict of 0xb8670d0
     9   1255   0  3788968   1 321999568  90 dict of module
<1716 more rows. Type e.g. '_.more' to view.>
4

1 回答 1

3

为什么不使用类似的东西:

h.heap().byid

但这只会显示即时大小(即不是列表的总大小,包括它可能引用的其他列表)。

如果你有一个特定的对象,你希望得到你可以使用的大小:

h.iso(object).domisize

查找删除后将释放的大致内存量。

于 2014-05-07T08:19:34.337 回答