| کانال توسعه‌دهندگان پایتون |: post #177 — TG.ME

چرا متود copy همیشه کپی واقعی نمی‌سازه؟

یکی از باگ‌هایی که حتی برنامه‌نویس‌های با تجربه هم گاهی باهاش روبه‌رو میشن، تفاوت بین Copy و Deep Copy هست

فرض کنید این لیست رو داریم:

data = [
["Yasin", "Ali"],
["Math", "Science"]
]

حالا ازش کپی می‌گیریم:

new_data = data.copy()

خیلی‌ها فکر می‌کنن new_data کاملاً مستقل از data شده اما اینطور نیست

اگر این کار رو انجام بدیم:

new_data[0].append("Sina")

نتیجه:

print(data)

# خروجی 👇🏻
# [['Yasin', 'Ali', 'Sina'], ['Math', 'Science']]

چرا لیست اصلی هم تغییر کرد؟

چون copy() فقط لیست بیرونی رو کپی می‌کنه، ولی عناصر داخلش همچنان به همون آبجکت‌های قبلی اشاره می‌کنن.

به این میگن Shallow Copy

-——————————————--

🎈اما راه حل؟

وقتی ساختارهای تو در تو دارید با از از deepcopy استفاده کنید

from copy import deepcopy

new_data = deepcopy(data)

حالا هر تغییری روی new_data بدید روی data اثری نداره

🔴 نکته مهم 🔴

اگر داده‌های شما تو در تو نیستند، copy کاملاً کافی و سریع‌تره

اما اگر با لیست، دیکشنری یا آبجکت‌های تو در تو کار می‌کنید استفاده اشتباه از copy می‌تونه باگ‌ ایجاد کنه که وقتتون گرفته بشه

🔖 #Python #پایتون

👤 BʟᴀᴄᴋCᴀᴛ

💎 Channel: @DevelopixPython
👍9❤3🔥1
July 8, 2026 1.4K 6