list is mutable while tuple is not.
Tuple can be hashed for e.g as a key for dictionaries
list is mutable while tuple is not.
Tuple can be hashed for e.g as a key for dictionaries
در پایتون ارسال اشیای تغییرناپذیر (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) از شی ارسال گردد.
به مثال زیر توجه کنید:
با مزایا شروع میکنیم؛ استفاده از iterator ها و generator ها خوب است چون:
1- خاصیت lazy بودن به ما امکان می دهد iterator هایی بسازیم که اندازه ندارند و عملا نامتناهی هستند.
2- مکانیزم iterator از لحاظ حافظه بسیار بهینه است و گاهی حتی چاره ای جز استفاده از iterator نداریم.
3- با استفاده از توابع __next__و یا yield می توان کلاس های بسیار مرتبی نوشت که به صورت کاملا شخصی سازی شده (customized) یک iterator را بسازند. مثال آن می تواند ساختن iterator بر روی یک دیتابیس یا دیتاست باشد.