← Все вопросы

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

Задан 17 месяцев назад721 просмотров2 ответа
13

Есть set и frozenset. На вид одно и то же. В чём разница и когда нужен именно frozenset?

2 ответа

22
✓ Принятый ответ — помог автору

set изменяемый — можно .add() / .remove(). frozenset неизменяемый — после создания не поменяешь. За счёт неизменяемости frozenset хешируемый, поэтому его можно класть ключом в словарь или элементом в другое множество, а обычный set — нельзя.

s = {1, 2}
s.add(3)            # ок

fs = frozenset({1, 2})
# fs.add(3)         -> AttributeError

d = {fs: 'pair'}    # ок: frozenset как ключ
# d = {s: 'pair'}   -> TypeError: unhashable type: 'set'

frozenset нужен ровно там, где требуется неизменяемое множество — как ключ словаря, как элемент set'а, или просто как защита от случайной модификации.

Дмитрий Ушкин frozenset как ключ — вот этого мне и не хватало понять 👍 · 17 месяцев назад
8

set изменяемый, frozenset — нет. frozenset можно сделать ключом словаря.

Ваш ответ

Войдите, чтобы ответить на вопрос.
Поддержать проект