تقنية

النسخ العميق في بايثون: مرجعان إلى نسخة واحدة

مرجعان إلى قائمة منسوخة واحدة
قائمة مشتركة داخل كل بنية. [1] [2]

النسخة العميقة تحفظ المشاركة. [1] [2]

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

deepcopy يحافظ على مشاركة القائمة الداخلية في عملية واحدة. [1] [2]

  • المرجعان يشيران إلى قائمة منسوخة واحدة، مختلفة عن الأصل. [1] [2]
  • الإضافة عبر أحدهما تظهر عبر الآخر؛ الأصل يبقى [1]. [1] [2]
  • is يختبر الهوية؛ تساوي القيم لا يثبتها. [1] [2]
  • نسخ العنصرين باستدعاءين مستقلين يفصل قائمتيهما. [1] [2]
  • المثال لقوائم عادية في 3.12.14؛ الفئات المخصصة خارج النطاق. [1] [2]

تتبع النسخة المشتركة

from copy import deepcopy
shared=[1]
original=[shared,shared]
clone=deepcopy(original)
print(clone[0] is clone[1])
print(clone[0] is original[0])
clone[0].append(2)
print(original,clone)

[1] [2]

الناتج: True ثم False ثم [[1], [1]] [[1, 2], [1, 2]]. [1] [2]

لماذا بقيت المشاركة؟

تسجل memo النسخة؛ تكرار المرجع يستعيدها. [1] [2]

الهوية والقيمة

في [[1],[1]] قائمتان متساويتان مختلفتان؛ تظلان مختلفتين بعد النسخ العميق. [1] [2]

استدعاءان مستقلان

نسخ كل عنصر باستدعاء مستقل: [deepcopy(x) for x in original]. لكل استدعاء memo جديدة؛ إضافة 2 للأولى لا تغير الثانية. [1] [2]

عملية واحدة تحفظ المشاركة واستدعاءان يفصلانها
بعد الإضافة إلى الأولى. [1] [2]

حد الحكم

قد تعرّف الفئات سلوك نسخ مخصصًا. [1] [2]

المراجع

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

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