Словарь Python и установить распределение памяти - PullRequest
0 голосов
/ 18 сентября 2018

Я нашел этот превосходный ресурс , посвященный использованию памяти словарями и наборами python, а именно:

По умолчанию наименьший размер словаря или набора равен 8 (то есть, если вы только рассказываете 3 значения, python все равно выделит 8 элементов). При изменении размера количество сегментов увеличивается в 4 раза, пока мы не достигнем 50 000 элементов, после чего размер увеличивается в 2 раза. Это дает следующие возможные размеры,

16, 64, 256, 1024, 4096, 16384, 65536, 131072, 262144, ...

Важно отметить, что изменение размера может привести к увеличению хэш-таблицы ИЛИ к уменьшению. То есть, если удаляется достаточно много элементов хеш-таблицы, размер таблицы можно уменьшить. Это связано с тем, что при рассмотрении полной заполненности таблицы на 2/3 используется общее количество вставленных и удаленных записей с момента последнего изменения размера. Однако изменение размера происходит только во время вставки.

Но это было опубликовано в сентябре 2014 года и, следовательно, вероятно, было написано за некоторое время до этого. Это все еще точно и актуально в последних версиях Python? (3.6 +)

1 Ответ

0 голосов
/ 18 сентября 2018

В CPython это больше не так.Эта конкретная часть реализации словаря изменялась пару раз с того момента, как было написано.Комментарий, начинающийся с этой строки прямо над определением GROWTH_FACTOR, дает небольшую историю.

/* GROWTH_RATE. Growth rate upon hitting maximum load.
 * Currently set to used*3.
 * This means that dicts double in size when growing without deletions,
 * but have more head room when the number of deletions is on a par with the
 * number of insertions.  See also bpo-17563 and bpo-33205.
 *
 * GROWTH_RATE was set to used*4 up to version 3.2.
 * GROWTH_RATE was set to used*2 in version 3.3.0
 * GROWTH_RATE was set to used*2 + capacity/2 in 3.4.0-3.6.0.
 */

Информация, представленная в книге, была устаревшей в течение примерно двух лет.время публикации.

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