查找Python中对象使用的内存大小

317 投票
5 回答
290204 浏览
提问于 2025-04-10 23:51

你想知道一个对象占用了多少内存,该怎么做呢?我知道可以查看一段代码使用了多少内存,但我想知道的是一个具体对象在它的整个生命周期中占用了多少内存,这个我还不太清楚。

5 个回答

8

我没有使用过下面这两个工具,但简单搜索了一下“Python [内存] 分析器”,找到了:

  • PySizer,一个“用于Python的内存分析器”,可以在 http://pysizer.8325.org/ 找到。不过这个页面似乎说明这个项目有一段时间没有更新了,并且提到了……

  • Heapy,支持“调试和优化与Python程序中的内存相关的问题”,可以在 http://guppy-pe.sourceforge.net/#Heapy 找到。

希望这些信息对你有帮助。

211

试试这个:

sys.getsizeof(object)

getsizeof() 是一个用来返回一个对象大小的函数,单位是字节。它会调用这个对象的 __sizeof__ 方法,并且如果这个对象是由垃圾回收器管理的,还会加上额外的垃圾回收器开销。

一个递归的例子

163

想要知道一个Python对象占用的内存大小并不简单。你可能会遇到一个问题,就是Python对象,比如列表和字典,可能会引用其他的Python对象(那么,这个对象的大小应该怎么算呢?是把每个对象的大小都算上,还是只算它本身的大小?)。此外,还有一些指针的开销和与对象类型及垃圾回收相关的内部结构。最后,有些Python对象的行为并不明显。例如,列表通常会预留比实际存储的对象更多的空间;而字典则更复杂,因为它们可以以不同的方式工作(比如对于少量键有不同的实现,有时还会多分配一些条目)。

网上有一段比较大的代码(还有一段更新过的代码),可以帮助你尽量估算一个Python对象在内存中占用的大小。

你还可以查看一些关于PyObject的旧描述(这是一个内部的C结构,几乎代表了所有的Python对象)。

撰写回答