3. Use default_factory for mutable dataclass defaults
Use default_factory for mutable dataclass fields instead of sharing one default object across instances.
Mutable defaults are shared at class definition time, which means one instance can accidentally affect another. default_factory makes the per-instance allocation explicit and prevents one of the most common dataclass footguns.
3.1. Don’t do this
1from dataclasses import dataclass
2
3@dataclass
4class Report:
5 tags: list[str] = []
3.2. Do this
1from dataclasses import dataclass, field
2
3@dataclass
4class Report:
5 tags: list[str] = field(default_factory=list)