Программа выведет {1: 'c'}. Ключи 1, 1.0 и True считаются равными и имеют одинаковый хеш; каждая следующая запись перезаписывает значение существующего ключа.
Что покажет словарь с конфликтующими ключами?
Программа выведет {1: 'c'}. Ключи 1, 1.0 и True считаются равными и имеют одинаковый хеш; каждая следующая запись перезаписывает значение существующего ключа.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, какой вывод получит программа при выполнении следующего кода, где создаётся словарь с ключами 1, 1.0 и True.
d = {1: 'a', 1.0: 'b', True: 'c'}
print(d)
Ответ
Программа выведет {1: 'c'}. Ключи 1, 1.0 и True считаются равными и имеют одинаковый хеш; каждая следующая запись перезаписывает значение существующего ключа.
Первый ключ 1 сохраняется в словаре. Значение 'a' заменяется сначала на 'b', затем на 'c', поэтому длина словаря равна одному.
print(d[1]) # c
print(d[1.0]) # c
print(d[True]) # c
Это не случайная коллизия хешей: равенство ключей тоже истинно. При одинаковом хеше, но неравных объектах словарь способен хранить отдельные записи. Для различения типов используйте ключи, включающие тип значения.