https://github.com/python/cpython/commit/5e80fee41a61bbb39c6054c5a5d82dc80b1adf8a
commit: 5e80fee41a61bbb39c6054c5a5d82dc80b1adf8a
branch: main
author: Jelle Zijlstra <jelle.zijls...@gmail.com>
committer: JelleZijlstra <jelle.zijls...@gmail.com>
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 -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to