تفاوت shallow و deep copy
تفاوت Shallow Copy و Deep Copy در پایتون
در برنامهنویسی پایتون، مفهوم کپی کردن اشیا به دو روش اصلی انجام میشود: Shallow Copy (کپی سطحی) و Deep Copy (کپی عمیق). درک تفاوت این دو برای جلوگیری از خطاهای رایج در کار با ساختارهای داده پیچیده ضروری است.
کپی سطحی (Shallow Copy) چیست؟
کپی سطحی یک شی جدید ایجاد میکند که حاوی ارجاعهایی به همان عناصر شی اصلی است. این بدان معناست که برای اشیا تغییرپذیر (mutable) مانند لیستها یا دیکشنریها، تغییر در عناصر کپی شده بر روی شی اصلی نیز تأثیر میگذارد.
- ایجاد با تابع
copy()
یاlist()
برای لیستها - مناسب برای اشیا یکبعدی و ساده
- عملکرد سریعتر نسبت به کپی عمیق
مثال | نتیجه |
---|---|
original = [1, [2, 3]] copied = original.copy() copied[1][0] = 99 |
original نیز تغییر میکند → [1, [99, 3]] |
کپی عمیق (Deep Copy) چگونه کار میکند؟
کپی عمیق یک شی کاملاً جدید با تمام محتویات خود ایجاد میکند. این روش برای ساختارهای داده تو در تو و پیچیده مناسب است و تغییرات در کپی ایجاد شده هیچ تأثیری بر شی اصلی ندارد.
- نیازمند ماژول
copy
و تابعdeepcopy()
- مصرف منابع بیشتر و سرعت کمتر نسبت به کپی سطحی
- ایمن برای کار با اشیا پیچیده و چندلایه
نکته کلیدی: در کپی عمیق، حتی اشیا تو در تو نیز به طور کامل کپی میشوند و هیچ ارجاع مشترکی با شی اصلی باقی نمیماند.
مقایسه کاربردی
ویژگی | Shallow Copy | Deep Copy |
---|---|---|
حافظه مصرفی | کمتر | بیشتر |
سرعت اجرا | سریعتر | کندتر |
اشیا تو در تو | تغییر مشترک | مستقل |
برای یادگیری بیشتر درباره کار با دیکشنریها در پایتون، میتوانید از آموزشهای مکث شاپ استفاده کنید.
در انتخاب بین این دو روش، باید به نیازهای پروژه و ساختار دادهها توجه کنید. برای دادههای ساده و یکبعدی، کپی سطحی معمولاً کافی است، اما در کار با اشیا پیچیده و چندلایه، کپی عمیق گزینه ایمنتری محسوب میشود.