You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Implement frozendict for partialobject in functools module #145478
After discussion on PR #145362, it became clear that there are many possibilities for unintended mutations in the partialobject in Module/_functoolsmodule.c, particularly for the kw dictionary for keywords. Thus, changing kw to be a frozendict could prevent any unintended consequences.
Additionally, right now, the keys of kw could be an arbitrary PyObject, leading to unintended code execution if they are not strings. Thus, enforcing that the entries are strings could solve any future problems (similar to what happened in #145362).
Lastly, Issue #145446 also makes sure that there are no unintended mutations in the functools internals for free-threading, but changing to using a frozendict would be a more robust solution.
I will work on this and create a PR in the next couple of days. I will wait until #145446 is resolved to avoid any conflicts.
Has this already been discussed elsewhere?
This is a minor feature, which does not need previous discussion elsewhere
This sounds like a reasonable approach. Immutable dictionaries can provide early detection or prevention for a number of subtle problems, especially those arising from free-threading.
Update: While I was working on this issue, I found that it would be convenient to have a way to convert a frozendict to a dict since a normal keywords dictionary is needed when calling functions. As such, I am waiting to create a PR until #145531 is merged.
it would be convenient to have a way to convert a frozendict to a dict
Currently, you can use dict = PyObject_CallOneArg((PyObject*)&PyDict_Type, frozendict); which calls the dict constructor. In my PR gh-145531, I proposed adding PyAnyDict_AsNewDict() function for that.
Activity
rhettinger commentedon Mar 3, 2026
This sounds like a reasonable approach. Immutable dictionaries can provide early detection or prevention for a number of subtle problems, especially those arising from free-threading.
brijkapadia commentedon Mar 12, 2026
Update: While I was working on this issue, I found that it would be convenient to have a way to convert a
frozendictto adictsince a normal keywords dictionary is needed when calling functions. As such, I am waiting to create a PR until #145531 is merged.vstinner commentedon Mar 12, 2026
Currently, you can use
dict = PyObject_CallOneArg((PyObject*)&PyDict_Type, frozendict);which calls thedictconstructor. In my PR gh-145531, I proposed addingPyAnyDict_AsNewDict()function for that.pythongh-145478: Implement `frozendict` into `functools.partial`