كيفية استخدام دالة copy() لإنشاء نسخ من القواميس والقوائم في Python

تمت الكتابة بواسطة: عبد الحكيم

تارخ آخر تحديث: 20 سبتمبر 2024

محتوى المقال

كيفية استخدام دالة copy() لإنشاء نسخ من القواميس والقوائم في Python

عند العمل مع القوائم (Lists) والقواميس (Dictionaries) في Python، قد تحتاج في بعض الأحيان إلى إنشاء نسخة من هذه الهياكل لتعديلها دون التأثير على النسخة الأصلية. هنا يأتي دور دالة copy()، التي تسمح لك بإنشاء نسخة سطحية (shallow copy) من القوائم والقواميس. في هذا المقال، سنستعرض كيفية استخدام دالة copy() مع أمثلة توضيحية.

ما هي دالة copy()؟

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

استخدام copy() مع القواميس

عند استخدام copy() مع القواميس، يتم إنشاء نسخة جديدة من القاموس الأصلي بحيث يمكن تعديل النسخة دون التأثير على القاموس الأصلي. دعونا نرى مثالًا توضيحيًا:

مثال على استخدام copy() مع القواميس

original_dict = {'name': 'Ahmed', 'age': 30}

copied_dict = original_dict.copy()

copied_dict['age'] = 35

print('Original Dictionary:', original_dict)
print('Copied Dictionary:', copied_dict)

نتيجة المثال:

عند تنفيذ هذا المثال، ستكون النتيجة كما يلي:

Original Dictionary: {'name': 'Ahmed', 'age': 30}
Copied Dictionary: {'name': 'Ahmed', 'age': 35}

كما ترى، التعديل على القاموس المنسوخ لم يؤثر على القاموس الأصلي.

استخدام copy() مع القوائم

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

مثال على استخدام copy() مع القوائم

original_list = [1, 2, 3, 4]

copied_list = original_list.copy()

copied_list[0] = 10

print('Original List:', original_list)
print('Copied List:', copied_list)

نتيجة المثال:

عند تنفيذ الكود، ستحصل على النتيجة التالية:

Original List: [1, 2, 3, 4]
Copied List: [10, 2, 3, 4]

هنا أيضًا، التغييرات التي تم إجراؤها على القائمة المنسوخة لم تؤثر على القائمة الأصلية.

ماذا عن النسخ العميق (Deep Copy)؟

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

لحل هذه المشكلة، يمكنك استخدام دالة deepcopy() من مكتبة copy، والتي تقوم بإنشاء نسخة عميقة بحيث تكون جميع الكائنات المستنسخة مستقلة تمامًا عن الأصل.

مثال على النسخ العميق باستخدام deepcopy()

import copy

original_list = [[1, 2], [3, 4]]

deep_copied_list = copy.deepcopy(original_list)

deep_copied_list[0][0] = 10

print('Original List:', original_list)
print('Deep Copied List:', deep_copied_list)

نتيجة المثال:

عند تنفيذ هذا الكود، ستكون النتيجة كما يلي:

Original List: [[1, 2], [3, 4]]
Deep Copied List: [[10, 2], [3, 4]]

في هذا المثال، التغييرات التي تم إجراؤها على النسخة العميقة لم تؤثر على القائمة الأصلية لأن deepcopy() ينسخ الكائنات الداخلية أيضًا.

متى تستخدم copy() و deepcopy()؟

استخدام copy() مناسب عندما تتعامل مع قوائم أو قواميس تحتوي على عناصر بسيطة (مثل أرقام أو نصوص). ولكن إذا كانت لديك قوائم أو قواميس تحتوي على كائنات قابلة للتغيير (مثل قوائم أو قواميس داخلية)، فيجب استخدام deepcopy() لضمان عدم تأثر الأصل بالتعديلات التي تُجرى على النسخة.

الخلاصة

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

طور مهاراتك: مقالات يجب قراءتها في البرمجة