Размер стороннего объекта в памяти

Функция sys.getsizeof() возвращает размер объекта в памяти в байтах. Поскольку эта функция может возвращать неточные результаты для сторонних объектов, как мне определить, сколько памяти использует объект BioPython?

Я загрузил файл размером 286 МБ, используя пример кода (измененный):

from Bio import SeqIO
handle = open("example.gb", "rU")
records = list(SeqIO.parse(handle, "genbank"))
handle.close()

а sys.getsizeof(records) указывает, что используется 268 КБ.


person SabreWolfy    schedule 16.01.2014    source источник


Ответы (1)


sys.getsizeof(obj) возвращает размер самого объекта obj, а не размер любого другого объекта, на который он мог бы так или иначе ссылаться:

>>> l = []
>>> sys.getsizeof(l)
72
>>> zero = 0
>>> sys.getsizeof(zero)
24
>>> l.append(zero)
>>> sys.getsizeof(l)
104
>>> 72 + 24
96
>>> l.append(zero)
>>> sys.getsizeof(l)
104
>>> l.append(zero)
>>> sys.getsizeof(l)
104
>>> l.append(zero)
>>> sys.getsizeof(l)
104
>>> l.append(zero)
>>> sys.getsizeof(l)
136
>>> 
>>> class Foo(object):
...     def __init__(self, bar=None):
...         self.bar = bar
... 
>>> f = Foo()
>>> sys.getsizeof(f)
64
>>> f.bar = 1
>>> sys.getsizeof(f)
64
>>> f.bar = l
>>> sys.getsizeof(f)
64
>>> 
person bruno desthuilliers    schedule 16.01.2014
comment
Интересно, но не отвечает на вопрос - person Alvaro; 16.01.2014
comment
Как определить объем памяти, который использует объект BioPython? - person SabreWolfy; 16.01.2014
comment
stackoverflow.com/questions/33978/ может быть хорошей отправной точкой - person bruno desthuilliers; 16.01.2014