True, 1 и 1.0 равны и имеют одинаковый хеш, поэтому занимают одну запись словаря. Последнее присваивание ставит значение 3; строка '1' остаётся отдельным ключом.
obj = {True: 1, 1: 2, 1.0: 3, "1": 4}
True, 1 и 1.0 равны и имеют одинаковый хеш, поэтому занимают одну запись словаря. Последнее присваивание ставит значение 3; строка '1' остаётся отдельным ключом.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
obj = {True: 1, 1: 2, 1.0: 3, "1": 4}
print(obj) # {True: 3, "1": 4}
Ответ
True, 1 и 1.0 равны и имеют одинаковый хеш, поэтому занимают одну запись словаря. Последнее присваивание ставит значение 3; строка '1' остаётся отдельным ключом.
В обычном Python результат отображается как {True: 3, '1': 4}: первый объект ключа сохраняется, последующие равные ключи обновляют его значение. В словаре всего две записи. Это не коллизия, требующая отдельного хранения, поскольку ключи ещё и равны. Если нужно различать логическое, целое и вещественное значения, используйте составной ключ с явным типом или другим тегом.