Почему в словаре `{True: 1, 1: 2, 1.0: 3, "1": 4}` у ключа `True` итоговое значение равно `3`, а не `1`?

True, 1 и 1.0 равны при сравнении и имеют одинаковый hash, поэтому считаются одним ключом. Последующие присваивания заменяют его значение, а строка '1' остаётся отдельным ключом.

Короткий ответ

Что ответить на собеседовании

True, 1 и 1.0 равны при сравнении и имеют одинаковый hash, поэтому считаются одним ключом. Последующие присваивания заменяют его значение, а строка '1' остаётся отдельным ключом.

Подробный разбор

Ответ с пояснениями

True, 1 и 1.0 равны при сравнении и имеют одинаковый hash, поэтому считаются одним ключом. Последующие присваивания заменяют его значение, а строка '1' остаётся отдельным ключом.

values = {True: 1, 1: 2, 1.0: 3, '1': 4}
print(values)  # {True: 3, '1': 4}

Сначала создаётся ключ True со значением 1, затем записи для 1 и 1.0 находят тот же ключ и обновляют значение до 3. Совпадения только hash недостаточно — важно ещё равенство ключей. В Python bool связан с целочисленной моделью, поэтому такое поведение согласовано с числовыми сравнениями. Для различения типов их нужно явно включить в состав ключа.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее