چالش روزانه · ۱۲ آبان ۱۴۰۵
چالش پایتون ۱۶: کپی یا نام دوم؟
قبل از اجرای کد، خروجی آن را پیشبینی کن. حدس نزن؛ خط به خط فکر کن پایتون چه میکند.
a = [1, 2, 3]
b = a
c = a[:]
b.append(4)
print(len(a), len(c))نمایش پاسخ و توضیح
پاسخ درست: گزینهٔ الف — 4 3
گام به گام
b = aکپی نمیسازد. فقط یک نام دوم (alias) برای همان لیست است.aوbهر دو به یک شیء در حافظه اشاره میکنند.c = a[:]با برش کامل یک لیست جدید با همان عناصر میسازد (کلون).
پس b.append(4) همان لیستی را عوض میکند که a به آن اشاره دارد، اما c دست نمیخورد.
a, b → [1, 2, 3, 4]
c → [1, 2, 3]
جواب: 4 3
خودتان ببینید
a = [1, 2, 3]
b = a
c = a[:]
print(a is b, a is c) # True False
print(id(a) == id(b)) # True
برای کپی، بهجای a[:] میتوانید a.copy() یا list(a) هم بنویسید. (درس متدهای لیست: alias و کلون)
حالا خودت اجرا کن و تغییرش بده
a = [1, 2, 3]
b = a
c = a[:]
b.append(4)
print(len(a), len(c))