В настоящее время я сравниваю выражения-генераторы и списки-выражения для моего финального проекта и в ходе этого хотел сравнить их объем памяти.(Заголовок: я прочитал этот пост, но не смог ответить на вопрос, который я вам представлю Как определить размер объекта в Python? ) Я начал с определения двух произвольных экземпляров для каждого типаструктуры:
a = [i for i in range(10)]
b = (i for i in range(10))
Теперь я сначала попытался проанализировать их длину с помощью sys.getsizeof
, что дает 192 для a
и 88 для b
(и 48 для пустого range(10)
).
Я не был на 100% уверен, что в sys.getsizeof
включен range
-экземпляр, потому что на него может просто ссылаться экземпляр выражения генератора, а ссылки на afaik не учитываются с getsizeof
, поэтому я также попыталсявызов pympler.asizeof.asizeof
для обоих экземпляров, что дает 504 для a
, 48 для чистого range(10)
и странно 0 для b
.Обращаясь к документации по pympler, я заметил, что существует аргумент ignored
для asizeof
, который игнорирует определенные типы.Я попробовал это снова с ignored=False
, но получил точно такие же результаты.
Что я хотел знать, так это то, почему выражения генератора имеют размер от 0 до asizeof
и если я могу положиться на sys.getsizeof
, чтобы дать мне правильное значение для генератора (в конце концов, это кажется реалистичным).