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的文档记录有点不足,因此您可能需要对网页或源代码进行一点挖掘,但它非常强大。还有一些可能是相关的。为什么“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
...