2010-08-12 2 views
14

Как узнать размер памяти структуры данных Python? Я ищу что-то вроде:размер памяти структуры данных Python

sizeof({1:'hello', 2:'world'}) 

Замечательно, если он рекурсивно пересчитывает все. Но даже основной нерекурсивный результат помогает. В основном я хочу получить представление о различных вариантах реализации, таких как tuple v.s. список v.s. класса с точки зрения объема памяти. Это важно, потому что я планирую создать миллионы объектов.

Моя текущая платформа для разработчиков - CPython 2.6.

+0

Это будет * очень медленная программа, если у вас много памяти. Кроме того, размер таблицы поиска будет довольно огромным (миллионы объектов?). Just sayin ' –

+1

[namedtuple] (http://docs.python.org/dev/library/collections.html#namedtuple-factory-function-for-tuples-with-named-fields) - хорошая альтернатива использованию классов как пространство, необходимое каждому экземпляру, такое же, как кортеж. Если у вас много экземпляров одного класса, вы должны изучить ['__slots__'] (http://docs.python.org/reference/datamodel.html#slots) –

ответ

20

Посмотрите на функцию sys.getsizeof. Согласно документации, он возвращает размер объекта в байтах, как задан методом __sizeof__ объекта.

Как указал Daniel, это не рекурсивный; он учитывает только байты, занятые самим объектом, а не другие объекты, к которым он относится. This recipe for a recursive computation связан с документацией Python 3.

+0

Спасибо. Это работает для меня! –

Смежные вопросы