Diferencias y métodos entre set y frozenset en Python

En Python, los conjuntos (set) y los conjuntos congelados (frozenset) son estructuras de datos que almacenan elementos únicos sin duplicados. Los conjuntos son mutables, permitiendo agregar o eliminar elementos, mientras que los frozenset son inmutables, lo que significa que no pueden modificarse después de su creación. Esta inmutabilidad permite que los frozenset se utilicen como claves en diccionarios o como elementos dentro de otros conjuntos.

Creación de conjuntos

Se pueden crear conjuntos mutbales e inmutables mediante las funciones de fábrica set() y frozenset(), o directamente con llaves para set.


# Conjunto mutable usando función de fábrica
conjunto_mutable = set('programacion')
print(conjunto_mutable)  # Ejemplo de salida: {'p', 'r', 'o', 'g', 'a', 'm', 'c', 'i', 'n'}

# Conjunto inmutable
conjunto_inmutable = frozenset('desarrollo')
print(conjunto_inmutable)  # frozenset({'d', 'e', 's', 'a', 'r', 'l', 'o'})

# Creación directa de conjunto mutable
conjunto_directo = {'ciencia', 'datos', 'tecnologia'}
print(conjunto_directo)

Modificación de conjuntos mutables

Los conjuntos mutables pueden alterarse con métodos específicos y operadores. Los frozenset no admiten cambios y generarán errores si se intenta modificarlos.


# Ejemplo de actualización con conjunto mutable
coleccion = set(['alpha', 'beta', 'gamma'])
coleccion.add('delta')
print(coleccion)  # {'alpha', 'beta', 'gamma', 'delta'}
coleccion.remove('alpha')
print(coleccion)  # {'beta', 'gamma', 'delta'}
coleccion -= set(['beta'])
print(coleccion)  # {'gamma', 'delta'}

# Intento de modificación en frozenset
inmutable = frozenset([10, 20, 30])
try:
    inmutable.add(40)
except AttributeError as e:
    print(e)  # 'frozenset' object has no attribute 'add'

Pruebas de pertenencia

Se puede verificar la existencia de elementos en ambos tipos de conjuntos usando los operadores in y not in.


conjunto_prueba = set([100, 200, 300])
print(200 in conjunto_prueba)  # True
print(400 in conjunto_prueba)  # False
print(100 not in conjunto_prueba)  # False

Comparación de conjuntos

Los conjuntos se consideran equivalentes si contienen los mismos elementos, independientemente del orden.


set_x = set([5, 10, 15])
set_y = set([15, 10, 5])
print(set_x == set_y)  # True
print(set_x != set_y)  # False

Relaciones de subconjunto y superconjunto

Se pueden evaluar si un conjunto es subconjunto o superconjunto de otro mediante operadores o métodos.


conjunto_peq = set([1, 2])
conjunto_grande = set([1, 2, 3, 4, 5])
print(conjunto_peq < conjunto_grande)  # True (subconjunto estricto)
print(conjunto_grande >= conjunto_peq)  # True (superconjunto o igual)

Iteración sobre conjuntos

Ambos tipos de conjuntos son iterables, permitiendo recorrer sus elementos con bucles for.


conjunto_iterable = set(['uno', 'dos', 'tres'])
for item in conjunto_iterable:
    print(item)

# Ejemplo con frozenset
frozen_iterable = frozenset(['a', 'b', 'c'])
for letra in frozen_iterable:
    print(letra)

Operaciones de conjuntos

Los conjuntos soportan operaciones matemáticas como unión (|), intersección (&), diferencia (-), y diferencia simétrica (^). El tipo del resultado depende de los operandos.


set_a = set([1, 2, 3, 4])
set_b = set([3, 4, 5, 6])
union_result = set_a | set_b
print(union_result)  # {1, 2, 3, 4, 5, 6}
interseccion_result = set_a & set_b
print(interseccion_result)  # {3, 4}
diferencia_result = set_a - set_b
print(diferencia_result)  # {1, 2}
simetrica_result = set_a ^ set_b
print(simetrica_result)  # {1, 2, 5, 6}

# Mezcla de tipos: el resultado sigue el tipo del operando izquierdo
frozen_set = frozenset([10, 20, 30])
mutable_set = set([20, 30, 40])
result_mixed = frozen_set | mutable_set
print(type(result_mixed))  # <class>
</class>

Métodos para conjuntos mutables

Los conjuntos mutables disponen de métodos como update(), intersection_update(), difference_update(), y symmetric_difference_update() para modificaciones in-place.


mutable_collection = set(['a', 'b', 'c'])
mutable_collection.update(['c', 'd', 'e'])
print(mutable_collection)  # {'a', 'b', 'c', 'd', 'e'}
mutable_collection.intersection_update(['b', 'c', 'f'])
print(mutable_collection)  # {'b', 'c'}

Funciones y métodos comunes a todos los conjuntos

Todos los conjuntos soportan funciones como len() para obtener el número de elementos, y métodos como copy() para crear copias superficiales.


conjunto_ejemplo = set([100, 200, 300])
print(len(conjunto_ejemplo))  # 3
copia_superficial = conjunto_ejemplo.copy()
print(copia_superficial)  # {100, 200, 300}

Etiquetas: Python set frozenset conjuntos operaciones de conjuntos

Publicado el 6-7 02:45