串列與元組

可跑範例 · Pyodide Python 載入中…
預測輸出,再按試跑對答案。重點四關:① 哪些操作會改原物件、哪些回傳 None;② = 是貼名牌不是拷貝(別名);③ 淺複製 vs 深複製對巢狀的差別;④ 元組不可變的層次。程式可改,改完再跑。
experiment 01

增刪改:誰回傳 None?

pop() 回傳被移除的元素;remove() 回傳 None

預測:remove 那行印出 None
experiment 02

切片:含頭不含尾

[起始:結束:梯級],含起始、不含結束;梯級 -1 反轉。

預測:[20, 40] / 反轉 / [50, 60]
experiment 03

別名 vs 切片複製(招牌)

= 是別名(同一物件、is 為 True);[:] 是新物件。

預測:alias 有 99、new 沒有
alias 與 nums 是同一個物件,append 兩者都看得到;new 是切片造出的新物件,不受影響。
experiment 04

淺複製 vs 深複製(招牌)

巢狀時,[:] 只複製外層、內層子串列共享;deepcopy 連內層都獨立。

預測:shallow 變 Spyder、deep 還是 Jupyter
淺複製的內層子串列與原串列是同一個,所以改 ListB[1][0] 連帶改到 shallow。
experiment 05

元組不可變:有層次

元組本身不能改元素,但裝在裡面的可變子物件(串列)內容仍可改。

預測:第一個成功、第二個 TypeError
experiment 06

sort 改自己,sorted 回傳新串列

L.sort() 原地排序回傳 Nonesorted(L) 回傳新串列、不動原串列。

預測:a=[1,2,3] L不變;b=None L被改
執行環境:Pyodide(瀏覽器中的 CPython)。首次載入需數秒,狀態顯示「就緒」後即可試跑。本頁不需網路以外的安裝。