python / python/cpython

weakref.WeakMethod equality behaves differently than weakref.ref (always False after garbage collection)

Offen
#101,848 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

stdlib type-bug
Vorherrschende Sprache
Python
Sterne
77.2k
Forks
36k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

Bug report

Equality comparison of weakref.ref objects succeeds both before and after object deletion. Equality of two weakref.WeakMethod objects, however, is always false if the underlying object has been deleted:

>>> from weakref import WeakMethod, ref
>>> class T:
...   def x(self): ...
...
>>> t = T()
>>> r1 = ref(t)
>>> r2 = ref(t)
>>> m1 = WeakMethod(t.x)
>>> m2 = WeakMethod(t.x)
>>> r1 == r2
True
>>> m1 == m2
True
>>> del t
>>> r1 == r2
True
>>> m1 == m2
False

Is this a bug? or perhaps desirable behavior or a fundamental limitation of bound method weak references?

Your environment

  • Python 3.11.0 | packaged by conda-forge | (main, Jan 15 2023, 05:44:48) [Clang 14.0.6 ] on darwin
  • macos x86_64, v12.6.1 (21G217)

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginnen Sie damit, das bereitgestellte Python-REPL-Beispiel auszuführen, und vergleichen Sie weakref.ref mit weakref.WeakMethod vor und nach der Garbage Collection. Untersuchen Sie anschließend die Implementierungen von WeakMethod und ref sowie, falls vorhanden, deren gleichheitsbezogene Tests. Als erledigt gilt die Aufgabe, wenn die vorgesehene Gleichheitssemantik nach der Löschung festgestellt und eine Abdeckung hinzugefügt oder ein gezielter Fix vorgenommen wurde, falls sich das Verhalten als Fehler bestätigt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
backend
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.