Lingua-e
← Errores
Python

Qué significa Error de campo mutable en dataclass y cómo solucionarlo

Referencia del error

Error de campo mutable en dataclass

Lenguaje

Python

Severidad

Media

Cuándo ocurre

El decorador dataclass de Python lanza un ValueError cuando un campo recibe un valor predeterminado mutable (lista, diccionario, conjunto, etc.).

Posibles soluciones

Reemplaza los valores predeterminados mutables con field(default_factory=list), field(default_factory=dict), etc. Para un valor predeterminado personalizado, usa field(default_factory=lambda: MyClass()). Esto asegura que cada instancia obtenga su propia copia independiente del valor mutable.

Más detalles

El decorador dataclass de Python lanza un ValueError cuando un campo recibe un valor predeterminado mutable (lista, diccionario, conjunto, etc.). Si se permitiera, todas las instancias compartirían el mismo objeto, causando bugs sutiles. La solución es usar field(default_factory=...) en su lugar.

Por qué ocurre

  • Un campo de dataclass recibe una lista, dict o conjunto vacío como valor predeterminado.
  • Se usa un objeto mutable personalizado como predeterminado sin envolverlo en default_factory.
  • Copiar una clase que no es dataclass a una dataclass sin actualizar los valores predeterminados.

Posibles soluciones

Reemplaza los valores predeterminados mutables con field(default_factory=list), field(default_factory=dict), etc. Para un valor predeterminado personalizado, usa field(default_factory=lambda: MyClass()). Esto asegura que cada instancia obtenga su propia copia independiente del valor mutable.

Ejemplos

Python

Código que causa el error

from dataclasses import dataclass

@dataclass
class Config:
    tags: list = []  # mutable default

Error en la terminal

ValueError: mutable default <class 'list'> for field tags is not allowed: use default_factory

Código corregido

from dataclasses import dataclass, field

@dataclass
class Config:
    tags: list = field(default_factory=list)

Practica en inglés

¿Cómo le explicarías un Dataclass Mutable Default Error a un compañero dev? Elige la frase correcta:

"I hit an error...

¿Listo para practicar tu inglés en el trabajo?

Lingua-e tiene ejercicios interactivos basados en conversaciones reales de developers: standups, code reviews, retrospectivas y más. Practica hasta que salga solo.

Prueba Lingua-e gratis