frozenset: неизменяемое множество
less_18__frozenset__dict_introduction/theory_01__frozenset.md
Вводит `frozenset` как неизменяемую версию `set`: элементы нельзя добавить, удалить или изменить после создания. Даёт таблицу способов создания, таблицу свойств (неизменяемость, но при этом хэшируемость — в отличие от обычного `set`) и таблицу методов, из которой явно исключены мутирующие (`add`, `remove`, `discard`, `clear`). Итоговая сравнительная таблица `set` vs `frozenset` — по изменяемости, хэшируемости, возможности быть ключом словаря или элементом другого множества, набору методов и производительности. Отдельно разобрано правило: тип результата операции (`|`, `.union()` и т.п.) между `set` и `frozenset` определяется типом левого операнда.
- frozenset() и frozenset(range(3)) — два способа создания
- Таблица свойств: неизменяемость + хэшируемость (в отличие от set)
- Методы только неизменяющие: union, intersection, difference, symmetric_difference, issubset, issuperset, isdisjoint, copy
- Сравнительная таблица set vs frozenset: изменяемость, хэшируемость, годность как ключ dict / элемент set
- immutable_set.union({4, 5}) → frozenset({...}), а {4,5}.union(immutable_set) → обычный set
- Правило: тип результата определяется типом объекта СЛЕВА от оператора/метода
Показать начало файла (86 строк всего)
## `frozenset`
— это **неизменяемое (immutable)** множество в Python.
В отличие от обычного `set`, его элементы нельзя изменять после создания:
нельзя добавлять, удалять или изменять элементы.
## Способы создания
| Способ | Пример | Результат |
|:----------------------------------------------------| :--------------------- |:--------------------------|
| Пустое множество | `frozenset()` | `frozenset()` |
| Из любого `iterable` <br>с неизменяемыми элементами | `frozenset(range(3))` | `frozenset({0, 1, 2})` |
## Свойства
| Свойство | Описание |
| :-------------------------- | :----------------------------------------------------------------- |
| **Неизменяемость** | После создания нельзя добавить или удалить элементы |
| **Хэшируемость** | Можно использовать как ключ в `dict` или элемент другого множества |
| **Порядок не сохраняется** | Как и в `set`, элементы неупорядочены |
| **Не допускает дубликатов** | Повторяющиеся элементы удаляются автоматически |
## Методы
Методы, доступные у `frozenset`, — только **неизменяющие** операции над множествами:
| Метод | Описание | Пример |
| :---------------------------- | :------------------------------------- | :-------------------------------- |
| `copy()` | Возвращает копию множества | `fs.copy()` |
| `union(*others)` | Объединение | `fs.union({3, 4})` |
| `intersection(*others)` | Пересечение | `fs.intersection({2, 3})` |
| `difference(*others)` | Разность | `fs.difference({1})` |
| `symmetric_difference(other)` | Симметрическая разность | `fs.symmetric_difference({3, 4})` |
| `issubset(other)` | Проверка, является ли подмножеством | `fs.issubset({1, 2, 3})` |
| `issuperset(other)` | Проверка, является ли надмножеством | `fs.issuperset({1})` |
| `isdisjoint(other)` | Проверка, не пересекаются ли множества | `fs.isdisjoint({5, 6})` |
Методов `add()`, `remove()`, `discard()`, `clear()` — ОТСУТСТВУЮТ.
## Сравнение `set` и `frozenset`
| Критерий | `set` | `frozenset` |
| :-------------------------------------- |:--------------------------------|:------------------------|
| Изменяемость | ✅ изменяемый | ❌ неизменяемый |
| Хэшируемость | ❌ нет | ✅ да |
| Можно быть элементом множества | ❌ нет | ✅ да |
| Можно быть ключом словаря | ❌ нет | ✅ да |
| Методы изменения (`add`, `remove`) | ✅ есть | ❌ нет |
| Методы объединения, пересечения и т. д. | ✅ есть | ✅ есть |
| Производительность | немного медленнее `frozenset`'a | немного быстрее `set`'a |
---
…