Qué significa Error de campo mutable en dataclass y cómo solucionarlo
Referencia del error
Error de campo mutable en dataclass
Lenguaje
Severidad
MediaCuá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.
Errores relacionados
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
Código que causa el error
from dataclasses import dataclass
@dataclass
class Config:
tags: list = [] # mutable defaultError 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