Узнайте, сколько памяти используется объектом в Python [Duplicate

StackOverflow https://stackoverflow.com/questions/33978

Вопрос

Этот вопрос уже имеет ответ здесь:

Как бы вы узнали, сколько памяти используется объектом? Я знаю, что можно узнать, сколько используется блоком кода, но не созданным объектом (в любое время в течение своей жизни), что я хочу.

Это было полезно?

Решение

Нет простого способа узнать размер памяти объекта Python. Полем Одна из проблем, которые вы можете найти, заключается в том, что объекты Python - как списки и DICTS - могут иметь ссылки на другие объекты Python (в данном случае, каким бы вашим размером был бы размер, содержащий размер каждого объекта или нет?). Существуют некоторые указатели над головой и внутренние сооружения, связанные с типами объектов и сбором мусора. Наконец, некоторые объекты Python имеют неочевидное поведение. Например, списки резервируют пространство для большего количества объектов, чем они, большую часть времени; DICTS еще более сложны, поскольку они могут работать по -разному (они имеют различную реализацию для небольшого количества ключей, а иногда и из -за распределения записей).

Eсть большой кусок кодаОбновленная большая часть кода) Там, чтобы попытаться наилучшим образом приблизительно размер объекта Python в памяти.

Вы также можете проверить некоторые Старое описание о PyObject (внутренняя C -структура, которая представляет практически все объекты Python).

Другие советы

Попробуй это:

sys.getsizeof(object)

getSizeof () вызывает объект __sizeof__ Метод и добавляет дополнительные накладные расходы на сборщик мусора если Объектом управляется коллекционером мусора.

Рекурсивный рецепт

Другой подход - использовать рассол. Видеть этот ответ к дублированию этого вопроса.

Я не имею личного опыта ни в одном из следующих, но простой поиск доходности «Python [память]»:

  • Pysizer, «профилировщик памяти для Python», найденный в http://pysizer.8325.org/. Полем Однако страница, кажется, указывает на то, что проект давно не обновлялся и относится к ...

  • Хипи, «поддержка [ing] отладки и оптимизации в отношении вопросов, связанных с памятью в программах Python», найдено в http://guppy-pe.sourceforge.net/#heapy.

Надеюсь, это поможет.

Это должно использоваться с осторожностью, потому что переопределение объектов __sizeof__ может вводить в заблуждение.

Используя Bregman.suite, некоторые тесты с Sys.getSizeOf вывод копии объекта массива (данные) в экземпляре объекта как больше, чем сам объект (MFCC).

>>> mfcc = MelFrequencyCepstrum(filepath, params)
>>> data = mfcc.X[:]
>>> sys.getsizeof(mfcc)
64
>>> sys.getsizeof(mfcc.X)
>>>80
>>> sys.getsizeof(data)
80
>>> mfcc
<bregman.features.MelFrequencyCepstrum object at 0x104ad3e90>

Для больших объектов вы можете использовать несколько грубый, но эффективный метод: проверьте, сколько памяти ваш процесс Python занимает в системе, затем удалите объект и сравните.

Этот метод имеет много недостатков, но он даст вам очень быструю оценку для очень больших объектов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top