فهرست تغییرپذیر هست. با other = numbers فهرست تازه نمیسازیم؛ دو نام به همون فهرست اشاره میکنن. برش numbers[:] یک لیست تازه میسازه، ولی از دادههای داخلش کپی جداگانه نمیگیره؛ به این روش «کپی سطحی» میگن؛ برای فهرست سادهٔ عددها، تغییر خانههای کپی به اصل آسیب نمیزند.
numbers = [3, 1, 2]
alias = numbers
copy = numbers[:]
alias.append(4)
copy[0] = 99
print(numbers)
print(copy)
values = [3, 1, 2]
ordered = sorted(values)
result = values.sort()
print(ordered)
print(values)
print(result)
removed = values.pop()
values.remove(1)
print(removed)
print(values)
دو خط اول خروجی [3, 1, 2, 4] و [99, 1, 2] هستن. کپی سطحی برای فهرستهای تو در تو، فهرستهای داخلی رو دوباره نمیسازد؛ در اون مسئله باید دربارهٔ عمق کپی فکر کنیم.
sorted فهرست تازه و مرتب برمیگردونه. sort خود فهرست رو تغییر میده و مقدار بازگشتی اون None هست. پس result اینجا فهرست نیست!
remove(value) اولین مورد یک مقدار رو حذف میکنه و اگه نباشد ValueError میده. pop(index) عضو یک خانه رو حذف و همون عضو رو برمیگردونه؛ بدون اندیس، عضو آخر رو انتخاب میکنه. pop روی فهرست خالی مجاز نیست. در انتهای مثال، removed برابر ۳ و values برابر [2] هست.
انتخاب ابزار به خواستهٔ مسئله بستگی داره: آیا اجازه داری ورودی رو تغییر بدهی؟ آیا مقدار حذفشده رو لازم داری؟
فعالیت شما
اثر alias، کپی، sort، sorted، remove و pop رو از هم تشخیص بده.