sys.getsizeof()Функция sys.getsizeof() возвращает размер объекта Python в байтах, включая накладные расходы сборщика мусора.
import sys
sys.getsizeof([1, 2, 3]) # Возвращает размер самого объекта списка
Критическое ограничение в том, что sys.getsizeof() измеряет только сам объект — память, занятую объектами, на которые он ссылается, она не учитывает.
Например, список, содержащий большие строки, будет иметь маленький размер, потому что измеряется только внутренняя структура списка, а не строки, на которые он указывает.
list возвращает размер структуры контейнераdict, set, tuple и других контейнеровЧтобы получить полный объём памяти, занятый вложенным или сложным объектом, нужен рекурсивный подход:
import sys
def deep_sizeof(obj, seen=None):
seen = seen or set()
if id(obj) in seen:
return 0
seen.add(id(obj))
size = sys.getsizeof(obj)
if hasattr(obj, '__iter__') and not isinstance(obj, (str, bytes)):
size += sum(deep_sizeof(i, seen) for i in obj)
return size
| Особенность | Поведение |
|---|---|
| Включает GC overhead | ✅ Да |
| Измеряет объекты-ссылки | ❌ Нет |
| Работает со всеми объектами | ✅ Да |
Используй sys.getsizeof() для быстрых, поверхностных проверок размера. Для точного профилирования памяти используй библиотеки типа memory_profiler или tracemalloc.
sys.getsizeof() включает overhead сборщика мусора в расчет размера.
Новый — ещё не проверен сообществом
Вы