Вопрос4
Осталось:

Чем отличаются set и frozenset?

Образцовый ответ

Показывать ответ по умолчанию

set (множество):

  • Изменяемая неупорядоченная коллекция уникальных элементов.
  • Поддерживает добавление и удаление элементов.
  • Не может быть ключом словаря или элементом другого множества.
colors = {"красный", "зелёный", "синий"}
colors.add("жёлтый")
colors.discard("красный")

frozenset (замороженное множество):

  • Неизменяемая версия множества.
  • Не поддерживает добавление и удаление элементов.
  • Является хешируемым — может быть ключом словаря.
immutable_set = frozenset([1, 2, 3])
# immutable_set.add(4)  # AttributeError

# frozenset как ключ словаря
cache = {frozenset([1, 2]): "результат"}

Общие операции над множествами:

a = {1, 2, 3, 4}
b = {3, 4, 5, 6}

a | b   # Объединение: {1, 2, 3, 4, 5, 6}
a & b   # Пересечение: {3, 4}
a - b   # Разность: {1, 2}
a ^ b   # Симметрическая разность: {1, 2, 5, 6}

На практике:

set используется для быстрого удаления дубликатов и проверки принадлежности (in за O(1)). frozenset нужен, когда множество должно быть ключом словаря или элементом другого множества.