Будет напечатано 1. Значения 1, True и 1.0 равны при сравнении и имеют одинаковые хеши, поэтому множество считает их одним элементом.
Какой будет размер множества, содержащего 1, True и 1.0?
Будет напечатано 1. Значения 1, True и 1.0 равны при сравнении и имеют одинаковые хеши, поэтому множество считает их одним элементом.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Что выведет программа после выполнения следующего кода?
items = {1, True, 1.0}
print(len(items))
Ответ
Будет напечатано 1. Значения 1, True и 1.0 равны при сравнении и имеют одинаковые хеши, поэтому множество считает их одним элементом.
Множество устраняет дубликаты не по совпадению типов, а с использованием хеша и равенства значений. Здесь выполняется:
print(1 == True == 1.0) # True
print(hash(1) == hash(True) == hash(1.0)) # True
Поэтому len({1, True, 1.0}) равно 1. Если по бизнес-правилам нужно различать число, булево значение и float, храните ключи вида (type(value), value), а не сами значения. Тогда каждый из трёх ключей будет отдельным.