https://github.com/python/cpython/commit/5e80fee41a61bbb39c6054c5a5d82dc80b1adf8a
commit: 5e80fee41a61bbb39c6054c5a5d82dc80b1adf8a
branch: main
author: Jelle Zijlstra <[email protected]>
committer: JelleZijlstra <[email protected]>
date: 2025-04-15T12:58:21-07:00
summary:
gh-129463: Remove two attributes from ForwardRef equality (#132283)
files:
A Misc/NEWS.d/next/Library/2025-04-08-10-45-22.gh-issue-129463.b1qEP3.rst
M Lib/annotationlib.py
M Lib/test/test_typing.py
diff --git a/Lib/annotationlib.py b/Lib/annotationlib.py
index e1c96298426283..a5defefb10ea3a 100644
--- a/Lib/annotationlib.py
+++ b/Lib/annotationlib.py
@@ -225,8 +225,6 @@ def __eq__(self, other):
# because dictionaries are not hashable.
and self.__globals__ is other.__globals__
and self.__forward_is_class__ == other.__forward_is_class__
- and self.__code__ == other.__code__
- and self.__ast_node__ == other.__ast_node__
and self.__cell__ == other.__cell__
and self.__owner__ == other.__owner__
)
@@ -237,8 +235,6 @@ def __hash__(self):
self.__forward_module__,
id(self.__globals__), # dictionaries are not hashable, so hash by
identity
self.__forward_is_class__,
- self.__code__,
- self.__ast_node__,
self.__cell__,
self.__owner__,
))
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py
index fc893807837eb9..a252035ed71a03 100644
--- a/Lib/test/test_typing.py
+++ b/Lib/test/test_typing.py
@@ -6539,6 +6539,13 @@ def test_or(self):
self.assertEqual(X | "x", Union[X, "x"])
self.assertEqual("x" | X, Union["x", X])
+ def test_multiple_ways_to_create(self):
+ X1 = Union["X"]
+ self.assertIsInstance(X1, ForwardRef)
+ X2 = ForwardRef("X")
+ self.assertIsInstance(X2, ForwardRef)
+ self.assertEqual(X1, X2)
+
class InternalsTests(BaseTestCase):
def test_deprecation_for_no_type_params_passed_to__evaluate(self):
diff --git
a/Misc/NEWS.d/next/Library/2025-04-08-10-45-22.gh-issue-129463.b1qEP3.rst
b/Misc/NEWS.d/next/Library/2025-04-08-10-45-22.gh-issue-129463.b1qEP3.rst
new file mode 100644
index 00000000000000..9c5796f11e2078
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2025-04-08-10-45-22.gh-issue-129463.b1qEP3.rst
@@ -0,0 +1,3 @@
+Comparison of :class:`annotationlib.ForwardRef` objects no longer uses the
+internal ``__code__`` and ``__ast_node__`` attributes, which are used as
+caches.
_______________________________________________
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]