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