关于性能:了解Python中的对象使用了多少内存

关于性能:了解Python中的对象使用了多少内存

Find out how much memory is being used by an object in Python

本问题已经有最佳答案,请猛点这里访问。

你将如何找出一个对象使用了多少内存?我知道有可能知道一块代码使用了多少,但不知道一个实例化对象(在其生命周期中的任何时候)使用了多少,这正是我想要的。


要找出一个python对象的内存大小是不容易的。您可能会发现的一个问题是,python对象(如list和dict)可能引用了其他的python对象(在本例中,您的大小是多少)?是否包含每个对象的大小?)。存在一些与对象类型和垃圾收集相关的指针开销和内部结构。最后,一些Python对象具有不明显的行为。例如,在大多数情况下,列表为更多对象预留空间;dict甚至更复杂,因为它们可以以不同的方式操作(它们对少量键有不同的实现,有时它们会过度分配条目)。

这里有一大块代码(以及一大块更新后的代码),以尽量接近内存中Python对象的大小。

您可能还需要检查关于pyobject(实际上表示所有python对象的内部C结构)的一些旧描述。


试试这个:

1
sys.getsizeof(object)

getsizeof()调用对象的__sizeof__方法,如果对象由垃圾收集器管理,则会添加额外的垃圾收集器开销。

递归配方


另一种方法是使用泡菜。请参阅此问题副本的答案。


我对以下任何一项都没有任何个人经验,但只需简单搜索"python[内存]分析器"即可:

  • pysizer,"一个针对python的内存分析器",可以在http://pysizer.8325.org/上找到。然而,页面似乎表明该项目已经有一段时间没有更新了,并且引用了…

  • heapy,"支持在python程序中调试和优化内存相关问题",可在http://guppy pe.sourceforge.net/heapy找到。

希望有帮助。


必须小心使用,因为对象的覆盖可能会误导用户。

使用bregman.suite,一些使用sys.getsizeof的测试将对象实例中数组对象(数据)的副本输出为大于对象本身(mfcc)。

1
2
3
4
5
6
7
8
9
10
>>> mfcc = MelFrequencyCepstrum(filepath, params)
>>> data = mfcc.X[:]
>>> sys.getsizeof(mfcc)
64
>>> sys.getsizeof(mfcc.X)
>>>80
>>> sys.getsizeof(data)
80
>>> mfcc
<bregman.features.MelFrequencyCepstrum object at 0x104ad3e90>

对于大的物体,你可以使用一些粗糙但有效的方法:检查您的python进程在系统中占用了多少内存,然后删除该对象并进行比较。

这个方法有很多缺点,但它会给你一个非常大的物体非常快速的估计。


推荐阅读

    Python类和对象

    Python类和对象,代码,培训,对象,实例,定义,关键字,函数,问题,顶层,全名,刚接

    Python中的对象

    Python中的对象,数据,连续,代码,培训,概念,对象,内存,类型,初始化,静态,Pyth

    Python 性能剖分工具

    Python 性能剖分工具,时间,工具,环境,分析,数据,代码,标准,人员,项目,培训,

    Python对象的创建

    Python对象的创建,单位,信息,培训,对象,函数,类型,指针,长度,内存,实例,pyth

    Python性能分析

    Python性能分析,代码,分析,对比,时间,工具,标准,注释,跨行,通用,报告,python

    Python 条件对象

    Python 条件对象,状态,培训,对象,条件,线程,方法,底层,发生,场景,典型,条件

    Python 事件对象

    Python 事件对象,通信,培训,线程,事件,对象,内部,标志,信号,机制,以上,一个

    Python 信号量对象

    Python 信号量对象,时间,培训,计数器,对象,机制,内部,参数,线程,剩余,数量,

    Python 线程对象

    Python 线程对象,线程,名称,单位,时间,培训,对象,程序,参数,方法,函数,先了

    Python类的实例化

    Python类的实例化,实例,培训,参数,对象,方法,属性,初始化,函数,顺序,定义,基

    python 的不可变对象

    python 的不可变对象,地址,内存,名字,培训,分析,对象,变量,例子,因变量,次