找出 Python 中某个对象使用了多少内存[重复]
- 2025-03-05 09:17:00
- admin 原创
- 79
问题描述:
您将如何找出对象使用了多少内存?我知道可以找出代码块使用了多少内存,但无法找出实例化对象(在其生命周期的任何时间)使用了多少内存,而这正是我想要的。
解决方案 1:
尝试一下:
sys.getsizeof(object)
getsizeof()返回对象的大小(以字节为单位)。它调用对象的方法,如果对象由垃圾收集器管理,__sizeof__
则添加额外的垃圾收集器开销。
递归配方
解决方案 2:
没有简单的方法可以找出 Python 对象的内存大小。您可能会发现的一个问题是 Python 对象(如列表和字典)可能引用其他 Python 对象(在这种情况下,您的大小是多少?大小是否包含每个对象的大小?)。有一些指针开销和与对象类型和垃圾收集相关的内部结构。最后,一些 Python 对象具有不明显的行为。例如,列表在大多数情况下为比它们拥有的更多的对象保留空间;字典甚至更复杂,因为它们可以以不同的方式操作(它们对少量键有不同的实现,有时它们会过度分配条目)。
有大量代码(以及更新的大量代码)试图最好地近似内存中 Python 对象的大小。
您可能还想查看一些关于 PyObject(代表几乎所有 Python 对象的内部 C 结构)的旧描述。
解决方案 3:
必须小心使用,因为对象 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>
解决方案 4:
对于大对象,您可以使用一种有点粗暴但有效的方法:检查您的 Python 进程在系统中占用了多少内存,然后删除该对象并进行比较。
这种方法有很多缺点,但是它可以为非常大的物体提供非常快速的估计值。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD