تقنية

WeakKeyDictionary في بايثون: هل يستبدل المفتاح المتساوي الأصلي؟

بقاء هوية المفتاح الأول بعد تحديث القيمة
المفتاح الأول باقٍ. [1] [2]

المساواة في القيمة تختلف عن هوية المفتاح. [1] [2]

الخلاصة السريعة

لا؛ يحدّث القيمة هنا، لكنه يبقي المفتاح الأصلي. [1] [2]

  • first وsecond متساويان ومختلفان في الهوية. [1] [2]
  • بعد الإسناد الثاني تكون القيمة 9. [1] [2]
  • المفتاح المخزن ما زال first. [1] [2]
  • حذف مرجعه يجعل القاموس فارغًا رغم بقاء second. [1] [2]
  • اختبرنا 3.12.14؛ لا نعمم توقيت الاختفاء. [1] [2]

المثال

from weakref import WeakKeyDictionary
class K(str): pass
first,second=K('bud'),K('bud')
d=WeakKeyDictionary()
d[first]=7
d[second]=9
print(next(iter(d)) is first,d[second])
del first
print(len(d),second)

[1] [2]

القيمة والمفتاح

المصدر هنا يخزن مرجع المفتاح الضعيف. يطبع المثال True 9 ثم 0 bud؛ تغيرت القيمة وبقيت هوية الأول. [1] [2]

فراغ القاموس رغم بقاء المفتاح الثاني
زوال مدخله. [1] [2]

النطاق

فئة نصية تدعم المرجع الضعيف، دون مرجع قوي آخر للأول. حذف المدخل قبل الإسناد الثاني يخزن الثاني. لا نعمم على دورات أو خيوط. [1] [2]

المراجع

  1. Python 3.12: WeakKeyDictionary
  2. CPython 3.12.14: weakref.py
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

للتوسع: بحث عن لغات البرمجة

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.