متغیرهای فهرستی خود داده رو کپی نمیکنن؛ انتساب میتونه دو نام رو به همان فهرست وصل کنه. به این اشتراک ارجاع گاهی alias میگیم. اگر از یکی از نامها append انجام بدیم، نام دیگر هم همان تغییر رو میبینه. برای فهرست ساده میتونیم با copy یک فهرست بیرونی تازه بسازیم.
در مثال، کپی فهرست نامها اجازه میده مورد جدید فقط به نسخه تازه اضافه بشه. سؤال اصلی عمداً copy نداره و باید نتیجه واقعی انتساب رو بخونی. خطای رایج تصور اینه که علامت مساوی همه عضوها رو تکثیر میکنه. اگر قرار باشه یک تابع ورودی رو تغییر نده، باید از این اشتراک حواسمون جمع باشه. کپی سطحی برای عضوهای تودرتو تضمین استقلال کامل نمیده، ولی این درس فقط فهرست عددهای ساده داره. بنابراین نیازی به کتابخانه یا deep copy نداریم. به هویت ظرف بیرونی و عمل تغییردهنده append توجه کن و قبل از انتخاب جواب دو نام رو به یک جعبه ذهنی وصل کن.
✍️ مثال حلشده:
names = ["سارا"]
copy_names = names.copy()
copy_names.append("مینا")
assert names == ["سارا"]
حالا نوبت توئه: کد سؤال a=[1,2] و سپس b=a و b.append(3) را اجرا میکند. مقدار نهایی a و b را انتخاب کن. اینجا copy یا ساخت فهرست تازه وجود ندارد و عضوها عدد سادهاند؛ فقط اثر انتساب و append را در نظر بگیر.
فعالیت شما
کد سؤال a=[1,2] و سپس b=a و b.append(3) را اجرا میکند. مقدار نهایی a و b را انتخاب کن. اینجا copy یا ساخت فهرست تازه وجود ندارد و عضوها عدد سادهاند؛ فقط اثر انتساب و append را در نظر بگیر.