Python 記憶體透視

📝 iPAS 考點提醒

「逐行看程式判斷結果」是 iPAS 中級科目二、三程式題最常見的題型,記憶體透視是最快的解題工具。考法一:追蹤指向——a = [1,2]; b = a; b.append(3) 後 print(a) 印什麼?考法二:可變與不可變——字串、整數重新賦值產生新物件,串列、字典原地修改影響所有共用者。考法三:把 list 傳進函式內修改,外面會不會變?考法四:DataFrame 方法多半回傳新物件(需回存),sklearn 模型 fit 後把參數存在實例屬性(coef_、mean_)。初級則考名詞辨析:變數、物件、參照、類別與實例、記憶體回收。

想練情境題與詳解 → AI 學習與考證地圖

❓ 常見問題

為什麼要用「記憶體透視」來讀程式?

因為多數輸出判斷題的陷阱都在「兩個名字是否指向同一個物件」。畫出門牌與物件的對應,就能一眼看出修改會不會外溢,比死背規則可靠。

什麼是可變(mutable)與不可變(immutable)物件?

list、dict、set 是可變物件,可以原地修改;int、float、str、tuple 是不可變物件,任何「修改」其實都是產生新物件並換門牌。這是判斷輸出的關鍵。

把 list 傳進函式裡修改,外面的 list 會變嗎?

會。函式參數收到的是同一個門牌,用 append 等原地操作會直接改到外面的物件;但若在函式內重新賦值(x = []),只是換了區域變數的門牌,外面不受影響。

is 和 == 有什麼差別?

== 比較的是值是否相等,is 比較的是兩個名字是否指向同一個物件。兩個內容相同的串列 == 為 True、is 為 False,考題常用這點考觀念。

sklearn 模型 fit 之後學到的東西存在哪裡?

存在實例的屬性裡,命名習慣是結尾加底線,例如 StandardScaler 的 mean_、LinearRegression 的 coef_。沒有 fit 就呼叫 transform 或 predict 會出錯。

Python 什麼時候會把物件從記憶體清掉?

當沒有任何門牌指向該物件(參照計數歸零)時,垃圾回收機制會釋放它。所以 del a 刪的是名字,不一定立刻刪物件,還要看有沒有其他名字在指。

🧭 相關主題

← 返回 AI 學習與考證地圖