Открытая адресация позволяет CPython искать ключи в компактной таблице без отдельной связной цепочки на каждый бакет. Это уменьшает накладные расходы и часто улучшает локальность памяти.
Почему в Python dict выбрана открытая адресация, а не метод цепочек?
Открытая адресация позволяет CPython искать ключи в компактной таблице без отдельной связной цепочки на каждый бакет. Это уменьшает накладные расходы и часто улучшает локальность памяти.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Открытая адресация позволяет CPython искать ключи в компактной таблице без отдельной связной цепочки на каждый бакет. Это уменьшает накладные расходы и часто улучшает локальность памяти.
При коллизии алгоритм проверяет другие позиции по последовательности probing. Таблица поддерживает запас свободного места и увеличивается, чтобы поиск не деградировал при высокой заполненности. Современный dict разделяет компактные индексы и записи; детали отличаются от простого массива пар. Удаления требуют специальных состояний, чтобы не оборвать поиск коллизий. Метод цепочек тоже корректен, но добавляет указатели и часто отдельные выделения памяти. Это инженерный выбор CPython, а не требование языка к любому словарю.
Источник: github.com.