你想知道如何查找对象正在使用多少内存?我知道可以查找代码块使用了多少内存,但不知道如何查找实例化对象在其生命周期中的内存使用情况。
你想知道如何查找对象正在使用多少内存?我知道可以查找代码块使用了多少内存,但不知道如何查找实例化对象在其生命周期中的内存使用情况。
object.__sizeof__()
有什么区别?似乎 sys.getsizeof(object)
返回的值稍微大一点。编辑:后者还包括垃圾回收器的开销。 - Mateen Ulhaqsys.getsizeof(object.copy)
经常给出正确的值,而 sys.getsizeof(object)
给出的值要低得多(我猜是指针大小)。 - Andrew D. Kingsys.getsizeof(x.copy)
显示为80。但数据类型是float64。 - GoingMyWayInt -> (Int, Int)
映射的字典,理论上计算这样一个对象的大小应该很简单,对吧? - David SandersPySizer,“Python的内存分析器”,网址为http://pysizer.8325.org/。然而该页面似乎表明该项目已经有一段时间没有更新,并且提到了...
Heapy,“支持在Python程序中调试和优化与内存相关的问题”,网址为http://guppy-pe.sourceforge.net/#Heapy。
使用这个方法需要小心,因为对象的__sizeof__被覆盖可能会导致误导。
使用bregman.suite时,对sys.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>
对于大型对象,您可以使用一种粗略但有效的方法:检查您的Python进程在系统中占用了多少内存,然后删除该对象并比较。
这种方法有许多缺点,但对于非常大的对象,它将为您提供一个非常快速的估计。
__sizeof__(self)
。例如NumPy就这样做了,而a.__sizeof__()
比a.nbytes
(分配数组中的字节数)要大一些(包括对象开销)。 - Tomasz Gandor