text: Title: (🐞) `RecursionError` in `==` when object has a reference to itself
  Body: ### Initial Checks
  
  - [X] I confirm that I'm using Pydantic V2
  
  ### Description
  
  ```
    [Previous line repeated 370 more times]
    File "C:\Users\AMONGUS\projects\test\.venv\Lib\site-packages\pydantic\main.py", line 961, in __eq__
      if isinstance(other, BaseModel):
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "C:\Users\AMONGUS\projects\test\.venv\Lib\site-packages\pydantic\_internal\_model_construction.py", line 273, in __instancecheck__
      return hasattr(instance, '__pydantic_validator__') and super().__instancecheck__(instance)
                                                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "<frozen abc>", line 119, in __instancecheck__
  RecursionError: maximum recursion depth exceeded while calling a Python object
  ```
  
  ### Example Code
  
  ```Python
  from __future__ import annotations
  
  from pydantic import BaseModel
  
  
  class A(BaseModel):
      a: A = None
  
  
  a = A()
  a.a = a
  a2 = A()
  a2.a = a2
  
  a == a2
  ```
  
  
  ### Python, Pydantic & OS Version
  
  ```Text
  pydantic version: 2.9.2
          pydantic-core version: 2.23.4
            pydantic-core build: profile=release pgo=false
                   install path: C:\Users\AMONGUS\projects\test\.venv\Lib\site-packages\pydantic
                 python version: 3.12.2 (tags/v3.12.2:6abddd9, Feb  6 2024, 21:26:36) [MSC v.1937 64 bit (AMD64)]
                       platform: Windows-10-10.0.19045-SP0
               related packages: typing_extensions-4.12.2
                         commit: unknown
  ```
  