Der Typ frozenset wurde in Python als unveränderliche Version des Standardtyps set eingeführt. Es war wichtig, die Verwendung von Mengen als Elemente anderer satz und als Schlüssel von dict zu ermöglichen – daher war eine immutable Variante erforderlich.
Die praktische Aufgabe besteht darin, Einzigartigkeit und die Möglichkeit einer schnellen Mitgliedschaftsprüfung zu gewährleisten sowie eine Menge als Schlüssel eines Wörterbuchs oder Element einer anderen Menge zu verwenden. Ein normales set eignet sich nicht, da es veränderlich und daher nicht hashierbar ist.
frozenset ist eine unveränderliche (immutable) Menge. Nach der Erstellung können seine Elemente nicht geändert werden: hinzufügen, entfernen oder ändern. Aber frozenset unterstützt alle gleichen Operationen wie set, mit Ausnahme der verändernden.
fs = frozenset([1, 2, 3]) print(2 in fs) # True # fs.add(4) # AttributeError: 'frozenset' object has no attribute 'add' map_dict = {fs: 'frozen'} # Zulässig, da frozenset – hashable
Kann frozenset veränderliche Objekte (z.B. Listen) enthalten?
Nein, nur hashierbare/unveränderliche Objekte können Elemente einer Menge beliebigen Typs sein. frozenset([[], 1]) führt zu einem TypeError, ebenso wie ein normales set.
Kann man einen veränderlichen set aus frozenset und umgekehrt erhalten?
Beide Typen können durch die Standardkonstrukteure ineinander umgewandelt werden:
fs = frozenset([1,2,3]) s = set(fs) print(type(s)) # <class 'set'>
Unterstützt frozenset die Methoden add() oder remove()?
Nein, diese Methoden fehlen, jeder Versuch, sie aufzurufen, führt zu einem AttributeError, da frozenset unveränderlich ist.
Verwendung eines normalen set als Schlüssel in dict:
s = set([1, 2]) d = {s: 'value'} # TypeError: unhashable type: 'set'
Vorteile:
Nachteile:
Umwandlung in frozenset:
fs = frozenset([1, 2]) d = {fs: 'value'} # OK print(d[frozenset([1, 2])]) # 'value'
Vorteile:
Nachteile: