这个问题在这里已经有答案了:

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

有帮助吗?

解决方案

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

有一个 大块代码 (和 更新了一大块代码)尝试最好地估计内存中 python 对象的大小。

您可能还想检查一些 关于 PyObject 的旧描述 (代表几乎所有Python对象的内部C结构)。

其他提示

尝试这个:

sys.getsizeof(object)

获取大小() 调用对象的 __sizeof__ 方法并增加了额外的垃圾收集器开销 如果 该对象由垃圾收集器管理。

递归配方

另一种方法是使用pickle。看 这个答案 到这个问题的副本。

我对以下任何一项都没有任何个人经验,但简单搜索“Python [内存]分析器”会产生:

希望有帮助。

必须谨慎使用,因为对象 __sizeof__ 的覆盖可能会产生误导。

使用 bregman.suite,一些使用 sys.getsizeof 的测试会输出对象实例中数组对象(数据)的副本,该副本大于对象本身 (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进程在系统中占用了多少内存,然后删除该对象并进行比较。

这种方法有很多缺点,但它可以让您非常快速地估计非常大的物体。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top