frozenset: add vs | — что напечатает программа
@python_quizРазберем этот квиз
Кратко: код пытается изменить неизменяемый объект frozenset методом add, ловит ошибку и использует оператор объединения |, после чего печатает длину набора и проверку вхождения элемента.
Исходный код:

Разбор по шагам
- frozenset([1, 2, 3]) создаёт неизменяемый набор {1, 2, 3}.
- У frozenset нет метода add; вызов data.add(4) приводит к
AttributeError. - Исключение перехватывается в блоке except.
- Операция
data = data| {4} создаёт новое множество, являющееся объединением исходного frozenset и множества {4}. Результат — новый frozenset с элементами 1, 2, 3, 4. - print(len(data), 3 in data) печатает длину этого нового набора (4) и результат проверки наличия 3 в наборе (True).
Пример выполнения и вывод:


Анализ вариантов ответов
- "Ошибка
AttributeErrorи ничего не выводится" — неверно. Исключение перехватывается, поэтому программа продолжает работу и выводит результат. - "Выведет: 3 False" — неверно. Длина набора после объединения составляет 4, а элемент 3 по‑прежнему в наборе.
- "Выведет: 4 True" — соответствует реальному поведению программы: создаётся новый набор из четырёх элементов, 3 входит в него.
- "Выведет: 4 False" — неверно по части проверки принадлежности: 3 остался в наборе, проверка даёт True.
Дополнительные пояснения
- Для изменяемых множеств (set) метод add существует и добавляет элемент на месте:

- Для frozenset изменение невозможно; но операции объединения/пересечения/разности возвращают новые frozenset:

Вывод
- В коде предусмотрена обработка
AttributeError, поэтому вместо ошибки создаётся новый frozenset с элементом 4, и итоговый вывод — 4 True. Это хорошая демонстрация отличий между изменяемыми и неизменяемыми коллекциями в Python и того, как работать с ними безопасно.