Skip to content

shared-mutable-pydantic-factory

Pydantic default factories should not return a captured mutable singleton.

Why

A default factory returning an existing mutable object gives different models the same state. Mutating one model can therefore silently change another model.

Fix

Construct a fresh value in the factory, or deliberately copy the required initial state.

Examples

Before — flagged A factory returns the same mutable list for every model
app/models.py
from pydantic import BaseModel, Field
SHARED = []
class Model(BaseModel):
values: list[int] = Field(default_factory=lambda: SHARED)
After — preferred The factory creates an independent list
app/models.py
from pydantic import BaseModel, Field
class Model(BaseModel):
values: list[int] = Field(default_factory=list)