Python
Средний
Как устроен словарь в Python? Какова сложность доступа к элементу по ключу?
Устройство словаря в Python
Структура:
Python dict — это хеш-таблица с открытой адресацией.
Компоненты:
- Хеш-функция — преобразует ключ в число
- Массив слотов — хранит пары ключ-значение
- Индекс — определяет позицию в массиве
Процесс доступа по ключу:
d = {"name": "Alice", "age": 30}
value = d["name"]
- Вычисляется
hash("name") - Индекс =
hash % размер_таблицы - Проверка ключа в слоте
- Если коллизия — линейное пробирование
Сложность операций:
| Операция | Средняя | Худшая |
|---|---|---|
Доступ d[key] |
O(1) | O(n) |
Вставка d[key] = val |
O(1) | O(n) |
Удаление del d[key] |
O(1) | O(n) |
Проверка key in d |
O(1) | O(n) |
Худший случай — когда все ключи имеют одинаковый хеш (редко).
Коллизии:
# Коллизия — разные ключи с одинаковым hash % size
# Решение: открытая адресация (линейное пробирование)
Требования к ключам:
- Хешируемость — должен иметь
__hash__() - Неизменяемость — хеш не должен меняться
- Сравнимость — должен иметь
__eq__()
# OK
d = {1: "int", "str": "string", (1,2): "tuple"}
# Error
d = {[1,2]: "list"} # TypeError: unhashable type
Оптимизации в Python 3.6+:
- Словари сохраняют порядок вставки
- Compact dict — меньше памяти
- Key-sharing — для атрибутов объектов
Похожие вопросы
Готовитесь к собеседованию?
ENIGMA AI — невидимый ИИ-помощник для технических интервью
Попробовать бесплатно