PyQuiz 50 - frozenset es inmutable en Python | Quiz interactivo

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

  1. a = frozenset([1, 2, 3]) — Se crea un frozenset inmutable con los elementos 1, 2 y 3.
  2. try: — Se inicia el bloque protegido.
  3. a.add(4) — Se intenta llamar al método add en el frozenset. La clase frozenset no tiene el método add.
  4. Python lanza un AttributeError: 'frozenset' object has no attribute 'add'.
  5. except AttributeError: — Se captura el AttributeError. El bloque except se ejecuta.
  6. print('Inmutable') — Se imprime 'Inmutable'. Las líneas print(a) dentro del try nunca 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.

Ver el curso completo →

37+ horas · 734 actividades · Proyecto real · Acceso de por vida · 14 días de garantía

Compartir