اذهب إلى المحتوى
  • 0

ما هو الفرق بين عملية النسخ السطحي والنسخ العميق في بايثون؟

Fahmy Mostafa

السؤال

ما الفرق بين استعمال دالة 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

ما الفرق بين الدالتين ومتى استعمل كلًا منهما؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

الفرق بين النسخ السطحي والنسخ العميق يظهر فقط في الكائنات المركبة (الكائنات التي تحتوي على كائنات أخرى ، مثل القوائم أو نُسخ من الفئات) حيث:
يُنشئ النسخ السطحي كائنًا مركبًا جديدًا ثم تُدرج مراجع محتوياته إلى الكائنات الموجودة في الأصل.
أما النسخ العميق يُنشئ كائنًا مركبًا جديدًا ، ثم تُدخل نسخًا متكررة فيه من الكائنات الموجودة في الأصل

مثال للتوضيح:

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

و هذا ما ذكرناه في النسخ العميق أنه يُنشئ كائناً جديداً ثم يُنشئ كائنات منسوخة من الكائنات الموجودة في الأصل في مُحتويات الكائن الذي نريد نسخه.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...