Python pympler.asizeof.asizeof возвращает 0 для выражения-генератора - PullRequest
0 голосов
/ 02 декабря 2018

В настоящее время я сравниваю выражения-генераторы и списки-выражения для моего финального проекта и в ходе этого хотел сравнить их объем памяти.(Заголовок: я прочитал этот пост, но не смог ответить на вопрос, который я вам представлю Как определить размер объекта в 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, чтобы дать мне правильное значение для генератора (в конце концов, это кажется реалистичным).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...