Вопрос проверяет понимание внутренней логики Set и роли Hashable в обеспечении уникальности.
Set использует хеш-таблицу для хранения элементов. Каждый элемент должен соответствовать Hashable. При добавлении элемента вычисляется его хеш и проверяется равенство с существующими элементами. Если такой элемент уже есть, вставка не происходит. Это гарантирует уникальность.
Set во многом похож на Dictionary, но хранит только ключи без значений.
Алгоритм вставки элемента:
вычисляется хеш элемента
определяется позиция в таблице
проверяется наличие равного элемента через ==
Если элемент уже существует:
новый не добавляется
множество остаётся неизменным
HashableДля корректной работы требуется:
стабильный хеш
корректное сравнение на равенство
Нарушение контракта Hashable приводит к:
дубликатам
потере элементов
некорректному поведению
В отличие от Array:
нет индексов
порядок не гарантирован
вставка и поиск — в среднем O(1)
Set обеспечивает уникальность элементов за счёт хеширования и строгого контракта Hashable. Это делает его эффективным инструментом для работы с уникальными значениями.