Fahmy Mostafa نشر 19 يونيو 2021 أرسل تقرير نشر 19 يونيو 2021 ما الفرق بين استعمال دالة copy من مكتبة copy كالتالي: import copy a = "deepak" b = {1: 10, 2: 20, 3: 30} a1 = copy.copy(a) b1 = copy.copy(b) print(id(a) == id(a1)) print(id(b) == id(b1)) والتي من خلالها نحصل على النتيجة التالية: True False وعندما استعمل دالة deepcopy من نفس المكتبة أحصل على نفس النتيجة import copy a = "deepak" b = {1: 10, 2: 20, 3: 30} a1 = copy.deepcopy(a) b1 = copy.deepcopy(b) print(id(a) == id(a1)) print(id(b) == id(b1)) والتي من خلالها نحصل على النتيجة التالية: True False ما الفرق بين الدالتين ومتى استعمل كلًا منهما؟ 1 اقتباس
1 سمير عبود نشر 19 يونيو 2021 أرسل تقرير نشر 19 يونيو 2021 الفرق بين النسخ السطحي والنسخ العميق يظهر فقط في الكائنات المركبة (الكائنات التي تحتوي على كائنات أخرى ، مثل القوائم أو نُسخ من الفئات) حيث: يُنشئ النسخ السطحي كائنًا مركبًا جديدًا ثم تُدرج مراجع محتوياته إلى الكائنات الموجودة في الأصل. أما النسخ العميق يُنشئ كائنًا مركبًا جديدًا ، ثم تُدخل نسخًا متكررة فيه من الكائنات الموجودة في الأصل مثال للتوضيح: import copy a = [1, 2] b = [4, 5] c = [a, b] إستخدام النسخ العادي او السطحي: d = copy.copy(c) print(id(c) == id(d)) # False print(id(c[0]) == id(d[0])) # True و هذا ما ذكرناه أن كلاهما يُنشئ كائناً جديداً. لذلك في الأول أعطى False بينما قلنا أنه في النسخ العادي مُحتويات الكائن المُنشأ تُدرج إلى مراجع الكائنات الموجودة في الأصل لذلك أعطى في الطباعة الثانية True. إستخدام النسح العميق: d = copy.deepcopy(c) print(id(c) == id(d)) # False print(id(c[0]) == id(d[0])) # False و هذا ما ذكرناه في النسخ العميق أنه يُنشئ كائناً جديداً ثم يُنشئ كائنات منسوخة من الكائنات الموجودة في الأصل في مُحتويات الكائن الذي نريد نسخه. 1 اقتباس
السؤال
Fahmy Mostafa
ما الفرق بين استعمال دالة copy من مكتبة copy كالتالي:
والتي من خلالها نحصل على النتيجة التالية:
وعندما استعمل دالة deepcopy من نفس المكتبة أحصل على نفس النتيجة
والتي من خلالها نحصل على النتيجة التالية:
ما الفرق بين الدالتين ومتى استعمل كلًا منهما؟
1 جواب على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.