https://github.com/python/cpython/commit/ec2bc12e54920d6fbd664ffc5af41dfb45a0a7f7
commit: ec2bc12e54920d6fbd664ffc5af41dfb45a0a7f7
branch: main
author: Serhiy Storchaka <[email protected]>
committer: serhiy-storchaka <[email protected]>
date: 2026-03-30T22:07:28+03:00
summary:

gh-145056: Add support for merging collections.UserDict and frozendict 
(GH-146465)

files:
A Misc/NEWS.d/next/Library/2026-03-26-14-44-07.gh-issue-145056.L9KPC3.rst
M Lib/collections/__init__.py
M Lib/test/test_userdict.py

diff --git a/Lib/collections/__init__.py b/Lib/collections/__init__.py
index ba60df037f28cb..febab521629228 100644
--- a/Lib/collections/__init__.py
+++ b/Lib/collections/__init__.py
@@ -1216,14 +1216,14 @@ def __repr__(self):
     def __or__(self, other):
         if isinstance(other, UserDict):
             return self.__class__(self.data | other.data)
-        if isinstance(other, dict):
+        if isinstance(other, (dict, frozendict)):
             return self.__class__(self.data | other)
         return NotImplemented
 
     def __ror__(self, other):
         if isinstance(other, UserDict):
             return self.__class__(other.data | self.data)
-        if isinstance(other, dict):
+        if isinstance(other, (dict, frozendict)):
             return self.__class__(other | self.data)
         return NotImplemented
 
diff --git a/Lib/test/test_userdict.py b/Lib/test/test_userdict.py
index 13285c9b2a3b7f..c60135ca5a12a8 100644
--- a/Lib/test/test_userdict.py
+++ b/Lib/test/test_userdict.py
@@ -245,7 +245,7 @@ class G(collections.UserDict):
     test_repr_deep = mapping_tests.TestHashMappingProtocol.test_repr_deep
 
     def test_mixed_or(self):
-        for t in UserDict, dict, types.MappingProxyType:
+        for t in UserDict, dict, frozendict, types.MappingProxyType:
             with self.subTest(t.__name__):
                 u = UserDict({0: 'a', 1: 'b'}) | t({1: 'c', 2: 'd'})
                 self.assertEqual(u, {0: 'a', 1: 'c', 2: 'd'})
@@ -276,7 +276,7 @@ def test_mixed_or(self):
         self.assertIs(type(u), UserDictSubclass)
 
     def test_mixed_ior(self):
-        for t in UserDict, dict, types.MappingProxyType:
+        for t in UserDict, dict, frozendict, types.MappingProxyType:
             with self.subTest(t.__name__):
                 u = u2 = UserDict({0: 'a', 1: 'b'})
                 u |= t({1: 'c', 2: 'd'})
diff --git 
a/Misc/NEWS.d/next/Library/2026-03-26-14-44-07.gh-issue-145056.L9KPC3.rst 
b/Misc/NEWS.d/next/Library/2026-03-26-14-44-07.gh-issue-145056.L9KPC3.rst
new file mode 100644
index 00000000000000..66e31117e33b6c
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2026-03-26-14-44-07.gh-issue-145056.L9KPC3.rst
@@ -0,0 +1 @@
+Add support for merging :class:`collections.UserDict` and :class:`frozendict`.

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to