Lingua-e
Python

¿Qué significa Error de campo mutable en dataclass?

← Errores

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.

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ómo solucionarlo

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.

Código corregido

from dataclasses import dataclass, field

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

Errores relacionados

¿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