CH05 · 學習導覽

串列與元組

序列、可變性,與「變數是名牌」
Python 程式設計 · 滄海二版 CH05 · 導覽(完整內容見 PDF 講義)
map · 四種資料結構

先把四個放上地圖

串列 list [ ]
有序、可變、可重複。本章主角。增刪改隨意。
元組 tuple ( )
有序、不可變、可重複。固定資料、更安全省記憶體。本章主角。
字典 dict {k:v}
鍵值對、無序號(CH06)。
集合 set { }
無序、不重複、不可索引(CH07)。

串列與元組都是「序列型別」:元素有排位順序、可用序號取值。差別只有一個字:可不可變

decision · 該用哪個

串列還是元組?

資料之後
會增刪改嗎?
會 → 串列 list
不會 → 元組 tuple 座標、設定、回傳多值、當字典的 key
map · 串列操作地圖

串列能做的事

建立
[ ] / list()
取值
索引 / 切片
增刪改
append insert pop remove del
進階
統計 / 排序 / 搜尋 / 結合 / 複製

元組走同一條路,但「增刪改」整段鎖死,只剩取值與不改原物件的查詢。

trap · 最常考的分辨

改自己 vs 回傳新值

操作回傳原物件
L.sort() / reverse()None被改
L.remove(x)None被改
L.pop(i)被移除的元素被改
sorted(L)新的已排序串列不變
L1 + L2 / L * n新串列不變

陷阱:x = L.sort() 會讓 x 變 None,不是排序後的串列。

key idea · 招牌觀念

變數是「名牌」不是「盒子」

MyPrice = [400, 300]

先在記憶體建一個 list 物件,再把 MyPrice 這張名牌貼上去。
= 是「貼名牌」,不是「拷貝資料」。

理解這句話,下面三格全通。

key idea · 三格對比

別名 / 淺複製 / 深複製

別名 b = a
同一個物件。
is → True
改 b,a 跟著變。
淺複製 a[:]
外層新物件。
is → False
內層子串列共享,改內層兩邊都變。
深複製 deepcopy
連內層都複製。
完全獨立,互不影響。
import copy

巢狀(串列裡有子串列)時,淺與深的差別才會浮現,這是本章最重的考點。

tuple · 不可變的層次

元組「不可變」有層次

不能做
Tup[1] = x → TypeError
Tup.sort() → AttributeError
append / pop / del 元素
仍可做
裡面若裝可變子物件(串列/字典),改子物件內容 OK:
Tup[2].append('.Net')
還有 index count len max min sumsorted()
checklist · 考前掃描

最容易掉的點

  • 切片 [a:b] 含頭不含尾[::-1] 反轉。
  • remove()/sort()/reverse() 回傳 Nonepop() 回傳被移除元素。
  • 單一元素元組要逗號:(10,) 是元組、(10) 是整數。
  • 集合不可索引;index() 找不到丟 ValueError
  • = 是別名不是複製;巢狀要 deepcopy 才完全獨立。
  • 元組元素不可改,但內含可變子物件的內容可改。
next · 學習閉環

接下來怎麼練

這份 slides
導覽
PDF 講義
學細節
index
Pyodide 試跑
本地練習
自己寫
測驗卷
≥ 90%

追蹤任何 Python:畫物件參照圖 → 逐行更新名牌 → 追別名與可變性 → 預測輸出 → 試跑對照。