تكرار السؤال: …
الإجابة المختصرة
النسخ السطحي ينشئ حاوية جديدة لكن عناصرها الداخلية هي نفس الكائنات، أما النسخ العميق فينسخ شجرة الكائنات بالكامل بشكل تعاودي مع التعامل مع المراجع الدائرية.
الشرح
ابدأ بالنسخ السطحي (list(x) أو x.copy() أو copy.copy) عندما تكون العناصر immutable أو عندما تكون المشاركة مقصودة. deepcopy أبطأ وقد لا يناسب كائنات مثل الاتصالات والأقفال وملفات الإدخال والإخراج. يمكن للـ class التحكم في سلوك النسخ عبر __copy__ و __deepcopy__. في كثير من الحالات يكون بناء كائن جديد بالحقول المطلوبة أوضح من deepcopy.
مثال بالكود
from copy import copy, deepcopy
settings = {"tags": ["a"]}
shallow = copy(settings)
deep = deepcopy(settings)
shallow["tags"].append("b")
print(settings["tags"]) # ['a', 'b'] — مشتركة
print(deep["tags"]) # ['a']أخطاء شائعة
- استخدام dict.copy() لحماية إعدادات متداخلة من التعديل.
- استدعاء deepcopy في مسارات ساخنة على كائنات كبيرة دون قياس.