Python:如何估计/计算数据结构的内存占用?

Python:如何估计/计算数据结构的内存占用?,python,memory-management,memory-size,Python,Memory Management,Memory Size,估计对象内存占用的好方法是什么 相反,测量足迹的好方法是什么 例如,假设我有一个字典,其值是整数、浮点元组的列表: d['key'] = [ (1131, 3.11e18), (9813, 2.48e19), (4991, 9.11e18) ] 我有4G的物理内存,我想在进入交换之前计算一下我可以在内存中存储多少行(key:values)。这是在linux/ubuntu 8.04和OS X 10.5.6上实现的 另外,计算程序实际内存占用的最佳方法是什么?我如何才能最好地确定它何时耗尽了物理内

估计对象内存占用的好方法是什么

相反,测量足迹的好方法是什么

例如,假设我有一个字典,其值是整数、浮点元组的列表:

d['key'] = [ (1131, 3.11e18), (9813, 2.48e19), (4991, 9.11e18) ]
我有4G的物理内存,我想在进入交换之前计算一下我可以在内存中存储多少行(key:values)。这是在linux/ubuntu 8.04和OS X 10.5.6上实现的


另外,计算程序实际内存占用的最佳方法是什么?我如何才能最好地确定它何时耗尽了物理内存并溢出?

您可以使用内存探查器来完成此操作,我知道其中有几个:

  • -正如主页现在建议的那样,可能已经过时:

  • 这可能是问题的重复。

    有一个很好的内存分析器(Heapy):


    Heapy的文档记录有点不足,因此您可能需要对网页或源代码进行一点挖掘,但它非常强大。还有一些可能是相关的。

    为什么“d”中有6个“str”对象?绑定新变量时,会创建一个新字符串(“d”)。属性查找(堆)占另一个。我不知道其余的是从哪里来的。实际结果各不相同,您必须根据您正在使用的特定解释器实现检查它们,或者进行一些尝试和错误以找到差异。例如,我刚刚尝试了上面的例子,它报告了三个字符串,总共96字节。当你说“一个对象”时,你可能想处理这样的情况:它可以是一个任意深度嵌套的对象,并且(多个,可能有别名)引用其他对象/字符串/数组等。
    >>> from guppy import hpy
    >>> hp = hpy()
    >>> hp.setrelheap() # ignore all existing objects
    >>> d = {}
    >>> d['key'] = [ (1131, 3.11e18), (9813, 2.48e19), (4991, 9.11e18) ]
    >>> hp.heap()
     Partition of a set of 24 objects. Total size = 1464 bytes.
     Index  Count   %     Size   % Cumulative  % Kind (class / dict of class)
         0      2   8      676  46       676  46 types.FrameType
         1      6  25      220  15       896  61 str
         2      6  25      184  13      1080  74 tuple
     ...