Un frozen set en Python es una colección desordenada e inmutable de elementos únicos. Se comporta de manera similar a un conjunto (set
), pero no puede ser modificado una vez creado.
Es decir, que una vez creado no podemos agregar o eliminar elementos, ni modificar los existentes (intentar agregar, eliminar o modificar elementos generará un error).
Al igual que los set
, los frozenset
sólo pueden contener elementos únicos. Los elementos duplicados se eliminan automáticamente.
También igual que los set
los elementos dentro de un frozenset
no tienen un orden específico (por tanto, no se puede acceder a los elementos por índice, a diferencia de las listas).
Los frozen sets son útiles cuando necesitamos una colección de elementos únicos que no se modificará durante la ejecución del programa. Por ejemplo, como claves en un diccionario o para incluirse en otros set (ya que ambos necesitan valores hashables e inmutables)
Creación de Frozen Sets
Los frozen set se crean utilizando la función frozenset()
y pueden contener elementos de cualquier tipo hashable.
# Crear un frozenset a partir de una lista
conjunto_inmutable = frozenset([1, 2, 3, 4, 5])
print(conjunto_inmutable) # Salida: frozenset({1, 2, 3, 4, 5})
# Crear un frozenset a partir de una lista de strings
frutas = frozenset(["manzana", "banana", "naranja"])
print(frutas) # Salida: frozenset({'manzana', 'banana', 'naranja'})
# Crear un frozenset a partir de un set
conjunto_mutable = {1, 2, 3, 4, 5}
conjunto_inmutable = frozenset(conjunto_mutable)
print(conjunto_inmutable) # Salida: frozenset({1, 2, 3, 4, 5})
# Crear un frozenset a partir de una cadena
conjunto_inmutable = frozenset('python')
print(conjunto_inmutable) # Salida: frozenset({'p', 'y', 't', 'h', 'o', 'n'})
Operaciones con FrozenSet
A pesar de su inmutabilidad, los frozenset
permiten realizar varias operaciones de conjuntos como unión, intersección y diferencia.
# Crear dos frozensets
set_a = frozenset([1, 2, 3])
set_b = frozenset([3, 4, 5])
# Unión de frozensets
union_set = set_a | set_b
print(union_set) # Salida: frozenset({1, 2, 3, 4, 5})
# Intersección de frozensets
interseccion_set = set_a & set_b
print(interseccion_set) # Salida: frozenset({3})
# Diferencia de frozensets
diferencia_set = set_a - set_b
print(diferencia_set) # Salida: frozenset({1, 2})
# Diferencia simétrica de frozensets
diferencia_simetrica_set = set_a ^ set_b
print(diferencia_simetrica_set) # Salida: frozenset({1, 2, 4, 5})
# Diferencia simétrica de frozensets
isSubet = frozenset([3, 4]) < set_b
print(isSubet) # True
Aunque los frozenset
permiten operaciones básicas de conjuntos, no soportan métodos que modifican el conjunto, como add()
, remove()
, o discard()
.
Ejemplos prácticos
Como claves en diccionarios
Dado que los frozenset
son hashable e inmutables, pueden usarse como claves en diccionarios.
# Usar un frozenset como clave en un diccionario
diccionario = {frozenset([1, 2, 3]): "valor1", frozenset([4, 5, 6]): "valor2"}
print(diccionario[frozenset([1, 2, 3])]) # Salida: valor1
Elementos de otros Sets
Los frozenset
pueden ser elementos de otros sets, lo que no es posible con los sets mutables.
# Usar frozensets como elementos de un set
set_of_frozensets = {frozenset([1, 2]), frozenset([3, 4])}
print(set_of_frozensets) # Salida: {frozenset({1, 2}), frozenset({3, 4})}