← Все вопросы
Чем set отличается от frozenset?
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 можно сделать ключом словаря.
Ваш ответ
Войдите, чтобы ответить на вопрос.