Frozenset tipi, Python'da set tipinin değiştirilemez versiyonu olarak ortaya çıkmıştır. Küme elemanlarının diğer set'lerin elemanları ve dict anahtarları olarak kullanılabilir olmasını sağlamak için immutable bir versiyon gerekliydi.
Pratik bir görev — benzersizlik ve hızlı üyelik kontrolü gereksinimi, ayrıca bir küme ile bir sözlükte anahtar olarak veya başka bir kümenin elemanı olarak kullanılabilmesi. Normal bir set uygun değildir, çünkü değiştirilebilirdir ve dolayısıyla hashlenebilir değildir.
Frozenset — değiştirilemez (immutable) bir kümedir. Oluşturulduktan sonra içeriği değiştirilemez: eleman eklenemez, çıkarılamaz veya değiştirilemez. Ancak frozenset, set ile aynı işlemleri destekler, değiştirici (mutating) olanlar hariç.
fs = frozenset([1, 2, 3]) print(2 in fs) # True # fs.add(4) # AttributeError: 'frozenset' object has no attribute 'add' map_dict = {fs: 'frozen'} # Geçerli, çünkü frozenset — hashable
Frozenset, değiştirilebilir nesneleri (örneğin, liste) içerebilir mi?
Hayır, yalnızca hashlenebilir/değiştirilemez nesneler herhangi bir kümenin elemanları olabilir. frozenset([[], 1]) TypeError verir, tıpkı normal bir set gibi.
Frozenset'ten değiştirilebilir bir set elde edilebilir mi?
Her iki tür de standart yapıcılar aracılığıyla birbirine dönüştürülebilir:
fs = frozenset([1,2,3]) s = set(fs) print(type(s)) # <class 'set'>
Frozenset, add() veya remove() yöntemlerini destekler mi?
Hayır, bu yöntemler mevcut değildir, bu yöntemlerin çağrılması AttributeError ile sonuçlanır, çünkü frozenset değiştirilemez.
Normal bir setin bir sözlükte anahtar olarak kullanımı:
s = set([1, 2]) d = {s: 'value'} # TypeError: unhashable type: 'set'
Artılar:
Eksiler:
Frozenset'e dönüştürme:
fs = frozenset([1, 2]) d = {fs: 'value'} # TAMAM print(d[frozenset([1, 2])]) # 'value'
Artılar:
Eksiler: