ویرگول
ورودثبت نام
محمد جواد حق بیگی
محمد جواد حق بیگی
خواندن ۲ دقیقه·۱۱ روز پیش

کپی و دیپ کپی در پایتون

کپی و دیپ کپی
کپی و دیپ کپی


سلام به همتون.محمدجواد حق بیگی هستم و اومدیم با یه آموزش جدید در این دفعه قراره کپی و دیپ کپی رو یادتون بدم که حلال خیلی از مشکلاتتونه.

اول بیاید با یک مثال شروع کنیم

a = 1 b = a b += 1 print(a)

خب مطمئن هستیم که عدد ۱ رو پرینت میکنه ولی:

a = [1,2] b = a b.append(3) print(a)

خب شما احتمالا فکر می کنید خروجی [1,2] هست ولی اشتباه می کنید و خروجی [1,2,3] هستش.

خوب ولی اگه از کپی و دیپ کپی استفاده کنیم:

import copy a = [1,2] b=copy.copy(a) b.append(3) print(a)

خب الان خروجی دو هست و همین قضیه برای دیپ کپی هم برقراره

import copy a = [1,2] b = copy.deepcopy(a) print(a) #output -- > [1,2]

حالا فرق اینها چیه(copyو deepcopy و حالت معمولی)؟

assignment:

import copy a = [1,2,3] b = [4,5,6] c = [a,b] d = c print(id(d) == id(c)) # --> True print(id(d[0]) == id(c[0])) # --> True

این کد پاسخ درست می دهد چون d همان c است. و همچنین d[0] همان c[0] است.

copy:

import copy a = [1,2,3] b = [4,5,6] c = [a,b] d = copy.copy(c) print(id(d) == id(c)) # --> False print(id(d[0]) == id(c[0])) # --> True

اولی کد پاسخ False می دهد چون d یک لیست جدید است ولی دومی پاسخ True است چون که در copy.copy فقط خود لیست کپی می شود و محل اجزای داخل آن در رم برابر است مثلا محل c[0] و d[0] در رم با هم برابر است.

deepcopy:

import copy a = [1,2,3] b = [4,5,6] c = [a,b] d = copy.deepcopy(c) print(id(d) == id(c)) # --> False print(id(d[0]) == id(c[0])) # --> False

اولی کد پاسخ False می دهد چون d یک لیست جدید است و دومی هم پاسخ False می دهد چون که در deepcopy هم اجزا و هم خود لیست کپی می شوند و محل همه انها در رم متفاوت است.

به عنوان مثال اگر id(d[0])در 0x72b9df992000 رم قرار داشته باشد id(c[0]) در 0x742f53595f40 قرار دارد.


ممنون از اینکه این مطلب رو خوندید یادتون نره به سایت هم سر بزنید(البته هنوز ناقصه) با تشکر از همتون

لینک:https://mohammadjavad12.github.io/irnelm

خداحافظ.


دیپ کپیپایتونکپیبرنامه نویسیلیست
سلام . من محمد جواد حق بیگیم دانش آموز کلاس هشتم تیزهوشان(تیزهوشان انصافا خیلی سخته) . عاشق برنامه نویسیم و امیدوارم حالتون خوب باشه:)
در ایجا همه میتوانند بنویسند.با هم میتوانیم به پیشرفت وطمان ایران کمک کنیم
شاید از این پست‌ها خوشتان بیاید