کپی برداری در زبان پایتون به چه معناست ؟

1

کپی برداری در زبان پایتون به چه معناست ؟ 

کیانا ابراهیمی سوال پاسخ داده شده اکتبر 15, 2020
گذاشتن نظر
0

کپی برداری در زبان پایتون به چه معناست ؟ 

بدلسازي میتواند برنامه را براي خواندن مشکل کند. زیرا ممکن است تغییرات در یـک مکـان تأثیرات غیرمنتظرهاي در مکان دیگر داشته باشد. ثبت سابقۀ همۀ متغیرهایی که ممکن اسـت بـه یـک شیء معطوف شوند مشکل است. کپی کردن یک شیء اغلب چارة دیگري براي بدلسازي است. ماژول copy شامل تابعی به نام copy است که میتواند هر شیئی را تکثیر کند:

>> import copy
>>> p1 = Point()
>>> p1.x = 3
>>> p1.y = 4
>>> p2 = copy.copy(p1)
>>> p1 == p2
0
>>> samePoint(p1, p2)
1

به محض اینکه ماژول copy را وارد محیط کاري کنیم، میتوانیم از متد copy براي سـاختن یک Point جدید استفاده کنیم. p1 و p2 یـک نقطـۀ واحـد نیسـتند، امـا داراي دادههـاي مشـابهی هستند. براي کپی کردن یک شیء ساده مانند Point که شامل اشیاء جاسازي شدهاي نیست، copy کافی است. به این نوع کپی کردن، کپی سطحی گفته میشود. براي اشیائی همچون Rectangle که شامل آدرسی به یک Point است، کپـی کـار کـاملاً درست را انجام نمیدهد. این تابع آدرس شیء Point را کپی میکند، بنابراین هـر دو Rectangle قبلی و Rectangle جدید به یک Point واحد معطوف میشوند. اگر ما مستطیلی به نام b1 بسازیم و از راه معمول (با استفاده از کپی) یک کپـی بـه نـام b2 از آن بگیریم .این بهطور حتم آن چیزي نیست که ما میخواستیم. در این مورد احضار growRect بـر روي یکی از Rectangleها تأثیري بر دیگري نخواهد گذاشت، اما احضار moveRect بـر روي یکـی، در هر دو مؤثر خواهد بود. این رفتار گیجکننده و زمینهساز خطا میباشد. خوشبختانه ماژول copy شامل متد دیگري به نام deepcopy است که علاوه بر خود شـیء، هر شیء جاسازي شده درون آن را هم کپی میکند. شما از اینکه چرا این عملیات کپی عمقی نامیـده میشود غافلگیر نخواهید شد:

>> (b2 = copy.deepcopy(b1

حال b1 و b2 اشیاء کاملاً جداگانهاي هستند.
میتوانیم از deepcopy براي بازنویسی growRect استفاده کنیم، بـهطـوريکـه بـه جـاي
تغییر دادن یک Rectangle موجود، یک Rectangle جدید بسـازد. ایـن Rectangle از نظـر
مکانی مشابه نوع قبلی است، اما ابعاد جدیدي دارد:

def growRect(box, dwidth, dheight):
import copy
newBox = copy.deepcopy(box)
newBox.width = newBox.width + dwidth
newBox.height = newBox.height + dheight
return newBox

تمرین 12-4 :moveRect را طوري بازنویسی کنید که به جاي تغییـر یـک Rectangle
قدیمی، Rectangle جدیدي را بسازد و برگرداند.

برای اموزش های ویدیویی زبان پایتون به بستر ویدیو های اموزشی بروید

بستر اموزش های ویدویی 

کیانا ابراهیمی سوال پاسخ داده شده اکتبر 15, 2020
گذاشتن نظر
شما در حال مشاهده 1 از 1 پاسخ هستید ، برای دیدن همه پاسخها اینجا را کلیک کنید .
پاسخ خود را بنویسید .
  • فعال
  • بازدیدها1733 times
  • پاسخ ها1 پاسخ
ورود به متاورس | متاورس ایرانی
ورود به متاورس ایران یا همان متاورس ملی

علامت ذره بین Tutorials سمت راست به رنگ قرمز به شما کمک خواهد کرد .

جدید ترین سوالات پرسیده شده

منقضی شدن سم بتانال 1 پاسخ | 0 آرا
ایا ایدز گزفتم؟ 0 پاسخ ها | 0 آرا
انتخاب ورزش رزمی 0 پاسخ ها | 1 رای
وزارت تعاون کار و رفاه اجتماعی نماد اعتماد الکترونیک اسناد و املاک کشور مرکز آموزش ویدیویی انجمن حم فروشگاه ملی تولید کنندگان مدیریت بر مدیران حم سامانه حیوانات رسانه ملی اخبار متا دانشگاه متاورس استخدام | دانش فروشگاه حم تبلیغات ملی بازار NFT متاورس رنگ نقشه ملی سه بعدی متا املاک و مستغلات