جدول المحتويات
11.6. المراجع الضعيفة #
تدير Python الذاكرة تلقائيًا (إحصاء المراجع لمعظم الكائنات وجمع البيانات المهملة للتخلص من الدورات). تُحرر الذاكرة بعد وقت قصير من حذف آخر مرجع لها.
يعمل هذا النهج جيدًا مع معظم التطبيقات، ولكن في بعض الأحيان، يلزم تتبع الكائنات فقط طالما أنها قيد الاستخدام من قِبل جهة أخرى. لسوء الحظ، يؤدي تتبعها فقط إلى إنشاء مرجع يجعلها دائمة. توفر وحدة weakref أدوات لتتبع الكائنات دون إنشاء مرجع. عندما لا تكون هناك حاجة للكائن، يُحذف تلقائيًا من جدول weakref، ويتم تشغيل استدعاء لكائنات weakref. تتضمن التطبيقات النموذجية تخزين كائنات مكلفة الإنشاء مؤقتًا:
>>> import weakref, gc
>>> class A:
... def __init__(self, value):
... self.value = value
... def __repr__(self):
... return str(self.value)
...
>>> a = A(10) # create a reference
>>> d = weakref.WeakValueDictionary()
>>> d['primary'] = a # does not create a reference
>>> d['primary'] # fetch the object if it is still alive
10
>>> del a # remove the one reference
>>> gc.collect() # run garbage collection right away
0
>>> d['primary'] # entry was automatically removed
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
d['primary'] # entry was automatically removed
File "C:/python39/lib/weakref.py", line 46, in __getitem__
o = self.data[key]()
KeyError: 'primary'