From 37ffae00766c5af950e91b0389e8c53fc1b75d54 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 17 Feb 2026 16:40:17 +0100 Subject: [PATCH 1/2] gh-141510: Change repr(frozendict) for empty dict repr(frozendict()) returns "frozendict()" instead of "frozendict({})". --- Lib/test/test_dict.py | 3 +++ Objects/dictobject.c | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/Lib/test/test_dict.py b/Lib/test/test_dict.py index 1db3559a012fd3..8ca6dcd54b0794 100644 --- a/Lib/test/test_dict.py +++ b/Lib/test/test_dict.py @@ -1767,6 +1767,9 @@ def test_update(self): self.assertEqual(copy, frozendict({'x': 1})) def test_repr(self): + d = frozendict() + self.assertEqual(repr(d), "frozendict()") + d = frozendict(x=1, y=2) self.assertEqual(repr(d), "frozendict({'x': 1, 'y': 2})") diff --git a/Objects/dictobject.c b/Objects/dictobject.c index 62abb793d002e0..c6f188e52899a6 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -7868,6 +7868,11 @@ static PyMethodDef frozendict_methods[] = { static PyObject * frozendict_repr(PyObject *self) { + PyDictObject *mp = (PyDictObject *)self; + if (mp->ma_used == 0) { + return PyUnicode_FromFormat("%s()", Py_TYPE(self)->tp_name); + } + PyObject *repr = anydict_repr_impl(self); if (repr == NULL) { return NULL; From b16cd6405da94359b51a5b83dd3894149764bb51 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Tue, 17 Feb 2026 18:35:29 +0100 Subject: [PATCH 2/2] Use _PyAnyDict_CAST() --- Objects/dictobject.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Objects/dictobject.c b/Objects/dictobject.c index c6f188e52899a6..3ebedc7708d7f4 100644 --- a/Objects/dictobject.c +++ b/Objects/dictobject.c @@ -7868,7 +7868,7 @@ static PyMethodDef frozendict_methods[] = { static PyObject * frozendict_repr(PyObject *self) { - PyDictObject *mp = (PyDictObject *)self; + PyDictObject *mp = _PyAnyDict_CAST(self); if (mp->ma_used == 0) { return PyUnicode_FromFormat("%s()", Py_TYPE(self)->tp_name); }