> Что происходит внутри dict при добавлении нового элемента (Python)
Уровень: middle · Роль: backend · Язык: Python · Категория: Технические вопросы
Компании: CoMagic, Домклик
Стек: Python
> Пример ответа
При добавлении нового элемента в словарь Python выполняет несколько шагов:
-
Вычисление хеша ключа - вызывается
hash(key). Если ключ нехешируемый (например, список), возникаетTypeError. -
Определение индекса в хеш-таблице - хеш маскируется (
hash & mask, гдеmask = size - 1), чтобы получить начальный индекс в массиве записей (entries). -
Поиск свободной ячейки - если ячейка занята, происходит разрешение коллизий методом открытой адресации (обычно используется псевдослучайное пробирование на основе старших битов хеша). Сравнение ключей идёт по равенству (
==), а не по идентичности. -
Проверка существования ключа - если найден существующий ключ с тем же хешем и равенством, его значение перезаписывается.
-
Вставка новой записи - если ключ новый, запись (хеш, ключ, значение) помещается в массив entries. Также обновляется массив индексов (indices), который указывает на позицию в entries.
-
Проверка загрузки - если количество занятых ячеек превышает порог (обычно 2/3 от размера таблицы), происходит ресайз: размер таблицы увеличивается примерно вдвое, все записи перехешируются и перераспределяются.
Таким образом, амортизированная сложность вставки - O(1) в среднем, но в худшем случае (много коллизий) может деградировать до O(n).
> Похожие задачи по Python
Как тестировать миграции базы данных?
Что такое git flow
Как реализуются атрибуты в классах Python
В чем разница между обычным классом Python, dataclass и Pydantic
> Похожие задачи по backend
Как организовать юнит-тесты в Python?
Как тестировать миграции базы данных?
Как реализуются атрибуты в классах Python
В чем разница между обычным классом Python, dataclass и Pydantic
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью