Подтвердить что ты не робот

Python: как оценить/рассчитать объем памяти структур данных?

Какой хороший способ оценить площадь памяти объекта?

И наоборот, какой хороший способ измерить площадь?

Например, скажем, у меня есть словарь, значения которого представляют собой списки целых чисел, float tuples:

d['key'] = [ (1131, 3.11e18), (9813, 2.48e19), (4991, 9.11e18) ]

У меня 4G физической памяти, и я хотел бы выяснить, сколько строк (ключ: значения) я могу хранить в памяти до того, как я перейду на swap. Это на linux/ubuntu 8.04 и OS X 10.5.6.

Кроме того, что лучший способ выяснить фактический объем памяти в моей памяти? Как лучше всего выяснить, когда он исчерпывает физическую память и проливает?

4b9b3361

Ответ 1

Guppy имеет хороший профилировщик памяти (Heapy):

>>> 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
 ...

Heapy немного недооценен, поэтому вам, возможно, придется немного прорваться через веб-страницу или исходный код, но это очень мощно. Также есть некоторые статьи, которые могут иметь значение.

Ответ 2

Вы можете сделать это с помощью профилировщика памяти, из которых есть пара, о которой я знаю:

  • PySizer - поистине устаревший, как теперь рекомендует домашняя страница:

  • Heapy.

Возможно, это дубликат этого вопроса.