先預測輸出,再按試跑對答案。重點四關:① 哪些操作會改原物件、哪些回傳 None;② = 是貼名牌不是拷貝(別名);③ 淺複製 vs 深複製對巢狀的差別;④ 元組不可變的層次。程式可改,改完再跑。
experiment 01
增刪改:誰回傳 None?
pop() 回傳被移除的元素;remove() 回傳 None。
experiment 02
切片:含頭不含尾
[起始:結束:梯級],含起始、不含結束;梯級 -1 反轉。
預測:[20, 40] / 反轉 / [50, 60]
experiment 03
別名 vs 切片複製(招牌)
= 是別名(同一物件、is 為 True);[:] 是新物件。
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() 原地排序回傳 None;sorted(L) 回傳新串列、不動原串列。
預測:a=[1,2,3] L不變;b=None L被改