python-frozen-set

Qué son y cómo usar Frozen Sets en Python

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})}