为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Python中分析内存使用情况?

如何在Python中分析内存使用情况?

料青山看我应如是 2019-07-22 15:35:01
如何在Python中分析内存使用情况?最近,我开始对算法感兴趣,并开始探索算法,编写一个简单的实现,然后以各种方式对其进行优化。我已经熟悉了用于分析运行时的标准Python模块(对于大多数情况,我发现IPython中的timeit魔术函数已经足够了),但我也对内存的使用感兴趣,因此我也可以探索这些权衡(例如,缓存一个表的先前计算的值与根据需要重新计算它们的成本)。是否有一个模块可以为我分析给定函数的内存使用情况?
查看完整描述

3 回答

?
倚天杖

TA贡献1828条经验 获得超3个赞

这个问题已经在这里得到了答复:Python内存分析器

基本上你做了类似的事情(引用自格皮):

>>> from guppy import hpy; h=hpy()

>>> h.heap()

Partition of a set of 48477 objects. Total size = 3265516 bytes.

 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)

     0  25773  53  1612820  49   1612820  49 str

     1  11699  24   483960  15   2096780  64 tuple

     2    174   0   241584   7   2338364  72 dict of module

     3   3478   7   222592   7   2560956  78 types.CodeType

     4   3296   7   184576   6   2745532  84 function

     5    401   1   175112   5   2920644  89 dict of class

     6    108   0    81888   3   3002532  92 dict (no owner)

     7    114   0    79632   2   3082164  94 dict of type

     8    117   0    51336   2   3133500  96 type

     9    667   1    24012   1   3157512  97 __builtin__.wrapper_descriptor

<76 more rows. Type e.g. '_.more' to view.>

>>> h.iso(1,[],{})

Partition of a set of 3 objects. Total size = 176 bytes.

 Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)

     0      1  33      136  77       136  77 dict (no owner)

     1      1  33       28  16       164  93 list

     2      1  33       12   7       176 100 int

>>> x=[]

>>> h.iso(x).sp

 0: h.Root.i0_modules['__main__'].__dict__['x']

>>> 


查看完整回答
反对 回复 2019-07-22
?
函数式编程

TA贡献1807条经验 获得超9个赞

如果只想查看对象的内存使用情况,(对其他问题的回答)

有一个模块名为打火机包含asizeof模块。

用途如下:

from pympler import asizeof
asizeof.asizeof(my_object)

不像sys.getsizeof,它适用于您自己创建的对象。.

>>> asizeof.asizeof(tuple('bcd'))200>>> asizeof.asizeof({'foo': 'bar', 'baz': 'bar'})400>>> asizeof.asizeof({})280>>> asizeof.asizeof({'foo':'bar'})360>>> asizeof.asizeof('foo')40>>> asizeof.asizeof(Bar())352>>> asizeof.asizeof(Bar().__dict__)280
>>> help(asizeof.asizeof)Help on function asizeof in module pympler.asizeof:asizeof(*objs, **opts)
    Return the combined size in bytes of all objects passed as positional arguments.



查看完整回答
反对 回复 2019-07-22
  • 3 回答
  • 0 关注
  • 1220 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信