في CPython 3.12.14، نداء hash الأول للمرجع بعد اختفاء كائننا يفشل؛ النداء السابق يغير نتيجة التحكم. [1] [2]
الخلاصة السريعة
نعم بعد تجزئة سابقة هنا. [1] [2]
- في CPython 3.12.14، نداء hash الأول للمرجع بعد اختفاء كائننا يفشل؛ النداء السابق يغير نتيجة التحكم. [1] [2]
- صنفنا Node يعيد 17 من __hash__، بلا دورة أو مرجع قوي إضافي؛ ref تنشئ مرجعًا ضعيفًا. [1] [2]
- بعد حذف own، تعيد own_ref القيمة None. أول نداء hash(own_ref) يرفع TypeError. [1] [2]
- تحكم مستقل: hash(control_ref) تعطي 17 قبل الحذف، وتبقى 17 بعد أن يعيد المرجع None. [1] [2]
- التنفيذ يعيد قيمة التجزئة المحفوظة قبل فحص غياب الكائن. نجاح hash لا يثبت بقاء الكائن؛ لا نعمم توقيت اختفائه. [1] [2]
النداء السابق
في CPython 3.12.14، نداء hash الأول للمرجع بعد اختفاء كائننا يفشل؛ النداء السابق يغير نتيجة التحكم. [1] [2]
صنفنا
صنفنا Node يعيد 17 من __hash__، بلا دورة أو مرجع قوي إضافي؛ ref تنشئ مرجعًا ضعيفًا. [1] [2]
النداء الأول
بعد حذف own، تعيد own_ref القيمة None. أول نداء hash(own_ref) يرفع TypeError. [1] [2]
from weakref import ref class Node: def __hash__(self):return 17 own=Node();own_ref=ref(own) del own print(own_ref() is None) try:hash(own_ref) except TypeError:print("TypeError") [1] [2]

التحكم
تحكم مستقل: hash(control_ref) تعطي 17 قبل الحذف، وتبقى 17 بعد أن يعيد المرجع None. [1] [2]
control=Node();control_ref=ref(control) print(hash(control_ref)) del control print(control_ref() is None,hash(control_ref)) [1] [2]
التنفيذ يعيد قيمة التجزئة المحفوظة قبل فحص غياب الكائن. نجاح hash لا يثبت بقاء الكائن؛ لا نعمم توقيت اختفائه. [1] [2]
المراجع
للتوسع: لغات البرمجة.
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
