Какой будет размер множества, содержащего 1, True и 1.0?

Будет напечатано 1. Значения 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), а не сами значения. Тогда каждый из трёх ключей будет отдельным.

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

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

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

Подробнее