Есть ли ссылка на размер памяти структуры данных Python на 32- и 64-битных платформах?
Если нет, было бы неплохо иметь его на SO. Чем полнее, тем лучше! Итак, сколько байтов используется следующими структурами Python (в зависимости от len
типа содержимого и, если это необходимо)?
int
float
- ссылка
str
- строка Юникода
tuple
list
dict
set
array.array
numpy.array
deque
- объект классов нового стиля
- объект классов в старом стиле
- ... и все, что я забываю!
(Для контейнеров, которые хранят только ссылки на другие объекты, мы, очевидно, не хотим подсчитывать размер самого элемента, поскольку он может быть общим.)
Кроме того, есть ли способ получить память, используемую объектом во время выполнения (рекурсивно или нет)?
python
memory
memory-footprint
LeMiz
источник
источник
a
используйтеa.nbytes
.Ответы:
Рекомендация из более раннего вопроса по этому поводу заключалась в использовании sys.getsizeof () , цитируя:
Вы можете использовать такой подход:
2012-09-30
python 2.7 (Linux, 32-разрядная версия):
python 3.3 (linux, 32-разрядная версия)
2016-08-01
OSX, Python 2.7.10 (по умолчанию, 23 октября 2015 г., 19:19:21) [Apple LLVM 7.0.0, совместимый с GCC 4.2.1 (clang-700.0.59.5)] на darwin
источник
0
,0.0
,''
иu''
для последовательности?Я с удовольствием использую pympler для таких задач. Он совместим со многими версиями Python -
asizeof
в частности, этот модуль восходит к 2.2!Например, используя пример hughdbrown, но с
from pympler import asizeof
в начале иprint asizeof.asizeof(v)
в конце, я вижу (система Python 2.5 на MacOSX 10.5):Ясно, что здесь есть некоторое приближение, но я нашел его очень полезным для анализа и настройки посадочного места.
источник
>>> getsizeof('a')
дает25
и>>> getsizeof('ab')
дает26
`Все эти ответы собирают информацию о мелких размерах. Я подозреваю, что посетители этого вопроса в конечном итоге будут здесь пытаться ответить на вопрос: «Насколько велик этот сложный объект в памяти?»
Здесь есть отличный ответ: https://goshippo.com/blog/measure-real-size-any-python-object/
Изюминка:
Используется так:
Если вы хотите более глубоко изучить модель памяти Python, есть отличная статья, в которой есть аналогичный фрагмент кода «общего размера» как часть более подробного объяснения: https://code.tutsplus.com/tutorials/understand-how- много-памяти-ваш-питон-объекты использования - CMS-25609
источник
96
указатель на объектПопробуйте профайлер памяти. профайлер памяти
источник
Также вы можете использовать модуль гуппи .
И:
источник
Также можно использовать
tracemalloc
модуль из стандартной библиотеки Python. Кажется, он хорошо работает для объектов, класс которых реализован на C (например, в отличие от Pympler).источник
Когда вы используете
dir([object])
встроенную функцию, вы можете получить__sizeof__
ее встроенную функцию.источник