انجمن‌های فارسی اوبونتو

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: سوال در خصوص یک قطعه کد پایتون  (دفعات بازدید: 858 بار)

0 کاربر و 1 مهمان درحال مشاهده موضوع.

آفلاین Mr-virus

  • Full Member
  • *
  • ارسال: 136
  • جنسیت : پسر
سوال در خصوص یک قطعه کد پایتون
« : 27 اردیبهشت 1399، 10:54 ب‌ظ »
سلام و عرض ادب دوستان.

بنده یک سوالی برام پیش اومده.به قطعه کد زیر توجه کنید:



def change(mylist):
    mylist.append([1,2,3,4])
    print("value insid" , mylist)
mylist=[10,20,30]
change(mylist)
print("outsid",mylist)
در بالا من mylist رو به عنوان آرگومان به تابع دادم و همونطور که میبینید یک لیستی رو بهش اضافه کردم و بعد چاپش کردم.سوالم اینه که مگر من mylist رو به عنوان یک متغیر به تابع ندادم؟اگر بله مگر این متغیر درون تابع مگه نباید به صورت لوکال محسوب بشه و فقط مقدار mylist داخل تابع تغییر کنه؟اگر بله پس چرا در خروجی مقدار mylist گلوبال رو هم تغییر داده؟

ممنون میشم یک توضیحی بدید.


===============
یک مسئله دیگه ای وجود داره که بنده mylist رو میگیرم و مقدار mylist رو به یک متغیر دیگه میدم و به متغیر جدید هر مقداری اضافه می کنم مقدار mylist هم اضافه میشه !!

def change(mylist):
    newmylist = mylist
    newmylist.append([1,2,3,4])
    print("value inside" , newmylist)
mylist=[10,20,30]
change(mylist)
print("outsid",mylist)
« آخرین ویرایش: 27 اردیبهشت 1399، 11:23 ب‌ظ توسط Mr-virus »

آفلاین M!lad

  • عضو کاربران ایرانی اوبونتو
  • *
  • ارسال: 1757
پاسخ : سوال در خصوص یک قطعه کد پایتون
« پاسخ #1 : 27 اردیبهشت 1399، 11:25 ب‌ظ »
list یک نوع داده mutable هست. شما تو تابع دارید دقیقا همون list خارجی رو تغییر می‌دید. یعنی یک فرنس به همون رو پاس دادید به تابع.

باید به این شکل تابع رو صدا کنید:

change(my_list[:])

که یک کپی ازش پاس داده بشه.

جواب سوال دوم هم همینه.



>>> lst = [1,2,3]
>>> lst2 = lst
>>> id(lst)
140138427623232
>>> id(lst2)
140138427623232
>>> lst.append(4)
>>> lst2
[1, 2, 3, 4]
>>> lst2 = ['a', 'b', 'c']
>>> lst
[1, 2, 3, 4]
>>> id(lst2)
140138427623168
>>> id(lst)
140138427623232
>>>

« آخرین ویرایش: 27 اردیبهشت 1399، 11:27 ب‌ظ توسط M!lad »
..I feel no fault for the fault I feel..

آفلاین Mr-virus

  • Full Member
  • *
  • ارسال: 136
  • جنسیت : پسر
پاسخ : سوال در خصوص یک قطعه کد پایتون
« پاسخ #2 : 27 اردیبهشت 1399، 11:45 ب‌ظ »
خیلی ممنون از شما.

ببخشید منبعی برای مطالعه و آشنایی با متغیرهای mutable (در صورت وجود منابع فارسی زبان) می تونید معرفی کنید؟

سرچ کردم مطالب قابل فهمی پیدا نکردم.