counterexample

فعلن فقط برنامه نویسی

counterexample

فعلن فقط برنامه نویسی

سه شنبه, ۱۵ بهمن ۱۳۹۸، ۰۲:۳۳ ق.ظ

۰

”by value“ یا ”by reference“ در پایتون

سه شنبه, ۱۵ بهمن ۱۳۹۸، ۰۲:۳۳ ق.ظ

در پایتون ارسال اشیای تغییرناپذیر (Immutable) به مانند انواع بولین، اعداد، رشته و تاپل به تابع، باعث بروز رفتاری مشابه با شیوه by value می‌شود ولی در مورد ارسال اشیای تغییرپذیر (Mutable) به مانند انواع لیست، دیکشنری و مجموعه اینگونه نخواهد بود.

 

برای جلوگیری از تغییر اشیای تغییرپذیر درون تابع، می‌توان یک کپی از این نوع اشیا را ایجاد و سپس به صورت آرگومان به تابع ارسال کرد:

>>> def f(a):
...     a[0] = 3
...     print(a)
...
>>> b = [1, 2]
>>> f(b[:])      # Pass a copy
[3, 2]
>>> b
[1, 2]

در نمونه کد بالا، از آنجایی که تمام اعضای شی لیست متغیر b تماما از انواع تغییرناپذیر هستند، یک کپی سطحی (Shallow Copy) از شی کفایت می‌کند ولی در حالتی غیر از این می‌بایست یک کپی عمیق (Deep Copy) از شی ارسال گردد.

به مثال زیر توجه کنید:

deepcopy

 

موافقین ۰ مخالفین ۰ ۹۸/۱۱/۱۵
counter example

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">