تفاوت 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) چگونه کار می‌کند؟

کپی عمیق یک شی کاملاً جدید با تمام محتویات خود ایجاد می‌کند. این روش برای ساختارهای داده تو در تو و پیچیده مناسب است و تغییرات در کپی ایجاد شده هیچ تأثیری بر شی اصلی ندارد.

  1. نیازمند ماژول copy و تابع deepcopy()
  2. مصرف منابع بیشتر و سرعت کمتر نسبت به کپی سطحی
  3. ایمن برای کار با اشیا پیچیده و چندلایه
نکته کلیدی: در کپی عمیق، حتی اشیا تو در تو نیز به طور کامل کپی می‌شوند و هیچ ارجاع مشترکی با شی اصلی باقی نمی‌ماند.

مقایسه کاربردی

ویژگی Shallow Copy Deep Copy
حافظه مصرفی کمتر بیشتر
سرعت اجرا سریع‌تر کندتر
اشیا تو در تو تغییر مشترک مستقل

برای یادگیری بیشتر درباره کار با دیکشنری‌ها در پایتون، می‌توانید از آموزش‌های مکث شاپ استفاده کنید.

در انتخاب بین این دو روش، باید به نیازهای پروژه و ساختار داده‌ها توجه کنید. برای داده‌های ساده و یک‌بعدی، کپی سطحی معمولاً کافی است، اما در کار با اشیا پیچیده و چندلایه، کپی عمیق گزینه ایمن‌تری محسوب می‌شود.