نسخ القائمة لا يعيد توجيه مرجعها الضعيف في مثالنا. [1] [2]
الخلاصة السريعة
لا؛ المرجع يبقى إلى الأصل هنا. [1] [2]
- نسخ القائمة لا يعيد توجيه مرجعها الضعيف في مثالنا. [1] [2]
- على CPython 3.12.14، نضع كائن Node بقيمة n=4 وweak=ref(own) في قائمة، ثم ننسخها عميقًا. [1] [2]
- clone[0] تختلف عن own في الهوية؛ clone[1] هي weak نفسها، وclone[1]() تعيد own. [1] [2]
- مسار weakref.ref يعيد المرجع نفسه. بعد own.n=9، قيمة النسخة 4 وقراءة المرجع 9. [1] [2]
- إنشاء ref(clone[0]) صراحة يعيد مرجعًا إلى النسخة بقيمة 4. الأصل والنسخة حيان؛ لا نختبر وكلاء أو حذفًا أو نسخًا مخصصًا. [1] [2]
الوجهة الأصلية
قائمة المثال
على CPython 3.12.14، نضع كائن Node بقيمة n=4 وweak=ref(own) في قائمة، ثم ننسخها عميقًا. [1] [2]
الهوية
clone[0] تختلف عن own في الهوية؛ clone[1] هي weak نفسها، وclone[1]() تعيد own. [1] [2]
from copy import deepcopy from weakref import ref class Node: def __init__(self,n):self.n=n own=Node(4);weak=ref(own) clone=deepcopy([own,weak]) print(clone[0] is own,clone[1] is weak) print(clone[1]() is own) [1] [2]
![After own.n=9; existing clone; clone[0].n:4; clone[1]().n:9; control=ref(clone[0]); control().n:4](https://images.bahralolom.com/assets/local-2000-20261012/BA-1690/python-deepcopy-weakref-values.png)
التعديل والتحكم
مسار weakref.ref يعيد المرجع نفسه. بعد own.n=9، قيمة النسخة 4 وقراءة المرجع 9. [1] [2]
own.n=9 print(clone[0].n,clone[1]().n) control=ref(clone[0]) print(control() is clone[0],control().n) [1] [2]
إنشاء ref(clone[0]) صراحة يعيد مرجعًا إلى النسخة بقيمة 4. الأصل والنسخة حيان؛ لا نختبر وكلاء أو حذفًا أو نسخًا مخصصًا. [1] [2]
المراجع
للتوسع: لغات البرمجة.
أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.
![own=Node(4); weak=ref(own); clone=deepcopy([own,weak]); clone[0] is own:False; clone[1] is weak:True; clone[1]() is own:True](https://images.bahralolom.com/assets/local-2000-20261012/BA-1690/python-deepcopy-weakref-main.png)