您将如何找出一个对象使用了多少内存?我知道可以知道一个代码块使用了多少,但不能知道实例化的对象(在其生命周期中的任何时候)使用了多少,而这正是我想要的。
我没有任何个人经验,以下任何一个,但一个简单的搜索“Python[内存]分析器”得到:
PySizer,“Python内存分析器”,可以在http://pysizer.8325.org/。然而,该页面似乎表明该项目已经有一段时间没有更新了,并引用…
Heapy,“支持调试和优化Python程序中与内存相关的问题,”可以在http://guppy-pe.sourceforge.net/#Heapy。
希望这能有所帮助。
没有简单的方法来找出一个python对象的内存大小。你可能会发现的一个问题是Python对象——比如列表和字典——可能有对其他Python对象的引用(在这种情况下,你的大小是多少?大小是否包含每个对象的大小?)有一些指针开销和与对象类型和垃圾收集相关的内部结构。最后,一些python对象具有不明显的行为。例如,列表在大多数情况下为更多的对象保留空间;字典甚至更复杂,因为它们可以以不同的方式操作(对于少量的键,它们有不同的实现,有时它们会过度分配条目)。
有一个一大块代码(和一个更新了一大块代码)试图最好地近似内存中的python对象的大小。
你可能还想检查一些关于PyObject的旧描述(表示几乎所有python对象的内部C结构体)。
试试这个:
sys.getsizeof(object)
getsizeof ()返回一个对象的字节大小。它调用对象的__sizeof__方法,并添加一个额外的垃圾收集器开销。
__sizeof__
一个递归配方
这必须小心使用,因为覆盖对象__sizeof__可能会产生误导。
使用bregman。套件,一些测试与系统。Getsizeof在对象实例中输出一个数组对象(data)的副本,该副本大于对象本身(mfcc)。
>>> 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>
这种方法有很多缺点,但它会给你一个非常快速的估计非常大的对象。