بکندباز

جلوگیری از تغییرات لیست اصلی

تابعی مثل تابع زیر رو ببینید من میخوام یک لیست اصلی داشته باشم که آرایه هاش ثابت بمونه و یک لیست متغیر که همون لیست اصلیه ولی اگر خواستم بتونم هر تغییری روش انجام بدم

def myfunc(plist):
    slist = plist
    slist[0].pop(0)
    return plist,slist
print(myfunc([[1,2,3],[2,4,6],[7,8,9]]))
توقع دارم در خروجی plist بدون تغییر و slist با حذف عدد 1 در خروجی چاپ بشه ولی در خروجی هردو تابع شامل این تغییر شدن
EmEsDigi
1 پاسخ ثبت شده است:

اگر لیست شما یک بعدی بود می تونستید از این کد استفاده کنید:

def myfunc(plist):
    slist = plist.copy()‎
    slist.pop(0)
    return plist,slist
print(myfunc([1,2,3]))

#([1, 2, 3], [2, 3])

با متد copy یک لیست جدا گانه ولی به صورت کپی از plist ایجاد میشه و لیست اصلی تغییر نمی کنه.

اما برای لیست چند بعدی باید از ماژول copy و یک کپی عمیق تر استفاده کنید:

import copy

def myfunc(plist):
    slist = copy.deepcopy(plist)
    slist[0].pop(0)
    return plist, slist

print(myfunc([[1, 2, 3], [2, 4, 6], [7, 8, 9]]))

#([[1, 2, 3], [2, 4, 6], [7, 8, 9]], [[2, 3], [2, 4, 6], [7, 8, 9]])
zohreh
3653

برای ارسال پاسخ باید ابتدا در سایت وارد شوید.