Skip to content

gh-145056: Add support for frozendict in dataclass asdict and astuple - #145125

Merged
JelleZijlstra merged 9 commits into
python:mainfrom
eendebakpt:dataclasses_frozendict_tests
Apr 23, 2026
Merged

gh-145056: Add support for frozendict in dataclass asdict and astuple#145125
JelleZijlstra merged 9 commits into
python:mainfrom
eendebakpt:dataclasses_frozendict_tests

Conversation

@eendebakpt

@eendebakpteendebakpt commented Feb 22, 2026

Copy link
Copy Markdown
Contributor

Adds support for frozendict in dataclassses.astype and dataclasses.asdict. The main effect is that astuple and asdict recurse into a frozendict (just like they recurse into a dict). For example

from typing import Any
from dataclasses import dataclass, astuple, asdict
@dataclass
class A:
item : Any
asub = A(item=10)
a = A(item=frozendict({'sub': asub}))
print(astuple(a))

Output on main: (frozendict({'sub': A(item=10)}),)
Output on PR: (frozendict({'sub': (10,)}),)

Notes:

  • Tracking issue for PEP 814 is PEP 814: Add built-in frozendict type #141510
  • For exact dicts there is a fastpath (for performance reasons). In this PR we have not added a fastpath for the frozendict. If this turns out to be a common case, we can add the fastpath later.

📚 Documentation preview 📚: https://cpython-previews--145125.org.readthedocs.build/

Comment threadLib/dataclasses.py Outdated
@eendebakpt
eendebakpt requested a review from caje731March 2, 2026 13:19
@JelleZijlstra
JelleZijlstra merged commit 8e43f3d into python:mainApr 23, 2026
55 checks passed
ljfp pushed a commit to ljfp/cpython that referenced this pull request Apr 25, 2026
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@eendebakpt@JelleZijlstra@caje731