# Created on savesnippets.com · https://savesnippets.com/5KNOhrniloyq8M from dataclasses import dataclass, field @dataclass(frozen=True, slots=True) class User: id: int name: str email: str roles: list[str] = field(default_factory=list) # never use [] as default! u = User(id=42, name="Alice", email="a@x.com", roles=["admin"]) print(u) # User(id=42, name='Alice', email='a@x.com', roles=['admin']) # Frozen → can't mutate; equality + hash come for free. # u.name = "Bob" # FrozenInstanceError print(hash(u)) # works because frozen=True