PyQuiz 50 – frozenset es inmutable en Python

El reto
a = frozenset([1, 2, 3])
try:
a.add(4)
print(a)
except AttributeError:
print('Inmutable')¿Cuál es el resultado?
- a) 'Inmutable'
- b) frozenset({1, 2, 3, 4})
- c) Error
Piensa tu respuesta antes de seguir leyendo…
Concepto: frozenset es inmutable
Un frozenset es la versión inmutable de un set. Tiene todas las propiedades de un conjunto (sin duplicados, búsqueda O(1), operaciones de conjuntos) pero no se puede modificar después de su creación: no tiene métodos add(), remove(), discard() ni update().
Al intentar llamar a un método de modificación en un frozenset, Python lanza un AttributeError (el método simplemente no existe en la clase). Esto lo hace útil cuando necesitas un conjunto que pueda ser clave de un diccionario o elemento de otro set (los sets mutables no son hashables y no pueden usarse como claves).
fs = frozenset([1, 2, 3])
print(fs) # frozenset({1, 2, 3})
print(type(fs)) # <class 'frozenset'>
# Se puede usar como clave de diccionario
diccionario = {frozenset([1, 2]): 'par'}
# Los sets mutables NO pueden ser claves:
# {set([1, 2]): 'error'} # TypeError: unhashable type: 'set'Paso a paso
a = frozenset([1, 2, 3])— Se crea un frozenset inmutable con los elementos1,2y3.try:— Se inicia el bloque protegido.a.add(4)— Se intenta llamar al métodoadden el frozenset. La clasefrozensetno tiene el métodoadd.- Python lanza un
AttributeError: 'frozenset' object has no attribute 'add'. except AttributeError:— Se captura elAttributeError. El bloqueexceptse ejecuta.print('Inmutable')— Se imprime'Inmutable'. Las líneasprint(a)dentro deltrynunca se ejecutan.
📥 Llévate el cheatsheet de Python (gratis)
PDF de 6 páginas con lo esencial: tipos, condicionales, bucles, estructuras de datos, funciones y los errores que más vas a cometer. Para tener al lado mientras programas.
Sin spam. Te apuntas a la lista, descargas el cheatsheet y recibes contenido de Python cada semana.
Solución
Respuesta correcta: A) 'Inmutable'
frozenset no tiene método add(). Es inmutable. Se captura el AttributeError.
Sabías que…
Los frozenset admiten todas las operaciones de conjuntos de lectura y devuelven frozenset como resultado:
a = frozenset([1, 2, 3])
b = frozenset([3, 4, 5])
print(a & b) # frozenset({3}) — intersección
print(a | b) # frozenset({1,2,3,4,5}) — unión
print(a - b) # frozenset({1, 2}) — diferencia
# Uso práctico: grafo con frozensets como claves
grafo = {
frozenset(['A', 'B']): 5, # distancia entre A y B
frozenset(['B', 'C']): 3,
}
print(grafo[frozenset(['A', 'B'])]) # 5
# Congelar un set existente:
set_mutable = {1, 2, 3}
set_inmutable = frozenset(set_mutable)Prueba tú mismo
¿Puede un frozenset ser elemento de otro set normal? Prueba con mi_set = {frozenset([1, 2]), frozenset([3, 4])}. ¿Funciona? ¿Por qué sí o por qué no?
Más PyQuizzes en elpythonista.com/pyquizzes
Tutorial relacionado: Conjuntos en Python
¿Quieres aprender Python en orden, no a saltos?
Esto que has leído es solo una pieza. En El Pythonista lo verás todo encadenado: 11 módulos, 37+ horas de vídeo, 734 actividades y un proyecto real (MovieTracker) que crece contigo desde la primera variable hasta el deploy a producción.
37+ horas · 734 actividades · Proyecto real · Acceso de por vida · 14 días de garantía
