找出Python中某个对象正在使用多少内存

时间:2020-03-05 18:44:51  来源:igfitidea点击:

我们将如何查找对象正在使用多少内存?我知道有可能找出一个代码块,而不是实例化对象(在其生命中的任何时候)要使用多少,这就是我想要的。

解决方案

回答

我没有以下任何一种个人经验,但是只需简单地搜索" Python [memory] ​​profiler"即可:

  • 在http://pysizer.8325.org/上找到PySizer,"用于Python的内存分析器"。但是页面似乎表明该项目已经有一段时间没有更新了,并指向...
  • 有关详细信息,请参见http://guppy-pe.sourceforge.net/#Heapy中的Heapy,"有关Python程序中与内存相关的问题的调试和优化支持"。

希望能有所帮助。

回答

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

那里有一大段代码(和更新的大段代码),以尝试最好地近似内存中python对象的大小。

我们可能还需要检查一些有关PyObject的旧描述(内部C结构实际上代表了所有python对象)。