05 / 90

Day 05: 原地修改、物件識別、型別與比較

解釋原地修改與重新綁定的區別,有意識地區分使用 == 與 is,並用可觀察的 Python 輸出診斷誤導性輸入和初學者的常見錯誤。

自學方法與 Python 480 分鐘(8 小時專注學習)
01 120 分鐘

原地修改與重新綁定的追蹤

獨立掌握檢查 — 評量作業期間不得使用 AI 輔助。若接受任何輔助必須如實申報,但接受輔助的作業只計為補救練習:在聲稱掌握之前,必須完成一次新的無輔助檢查。

前置要求

已完成 Day 04 的值與綁定檢查;能夠儲存一個簡短的 Python 檔案並在終端機中執行。

學習目標

透過預測、執行和解釋,說明為什麼 append 會改變兩個名稱共用的串列,而 a = a + [2] 只重新綁定名稱 a。

操作指引

必做:
1. 執行任何程式之前,先在草稿區寫下你對兩行輸出的預測。
2. 將練習中的程式儲存為 trace.py,然後執行 python trace.py。
3. 把實際輸出原樣抄在預測旁邊,並標出每一處不一致。
4. 針對每種情況,用一兩句話說明在該情況第三行之後 a 和 b 分別指向哪個串列物件。

選做(僅在必做證據完成之後):在每種情況之後加上 print(id(a), id(b)),確認兩個 id 只在情況 1 中相同。

自主實作與記錄

先預測輸出,然後執行:

a = [1]
b = a
a.append(2)
print("case 1:", a, b, a is b)
a = [1]
b = a
a = a + [2]
print("case 2:", a, b, a is b)

為什麼 b 在情況 1 中改變了,在情況 2 中卻沒有?

客觀知識測驗與診斷追蹤

請回答以下題目檢驗掌握情況。提交前請誠實聲明你的輔助條件。

聲明輔助條件

說明:無 AI 輔助屬於誠實聲明條件,非平台監控或強制檢測手段。

1.

依序執行 a = [1]、b = a、a = a + [2] 之後,print(b) 顯示什麼?

作答應證與歷史記錄

    掌握標準

    在沒有 AI 輔助的情況下,記錄了執行前的預測、兩行準確的輸出,以及能區分修改共用物件(情況 1)與把一個名稱重新綁定到新物件(情況 2)的正確解釋。

    權威來源資源與權利證明

    linking PSF License Version 2

    Python Standard Library: Built-in Types

    作者 / 機構: Python Software Foundation | 原始出處連結 ↗

    對應章節 / 時間戳: 相關章節:真值檢驗、比較、可變序列型別

    驗證版本與日期: Python 3.12 documentation (verified 2026-10-30)

    入選理由:

    用於核對真值檢驗、比較、綁定與原地修改行為的規範性參考。

    來源前置條件:

    Day 03 補救練習

    安全回退方案(離線彈性):

    執行所附 Python 範例,並查閱本機已安裝直譯器的說明。

    對比候選資源與選型分析 (2)
    Python Data Model reference ↗ compared_alternative [PSF License Version 2]

    該參考深入講解物件語義,超出了運算式練習所需的深度;選擇 stdtypes 可將範圍限定在運算子層面的內容。

    The Python Tutorial: An Informal Introduction ↗ compared_alternative [PSF License Version 2]

    這是對相同運算子的敘述性入門講解;選擇函式庫參考作為正式規範的依據。

    linking CC BY-NC-SA 3.0 (book) noncommercial share-alike

    Git User Manual: Recording Changes

    作者 / 機構: Git project | 原始出處連結 ↗

    對應章節 / 時間戳: 「記錄對儲存庫的修改」一節

    驗證版本與日期: Verified 2026-10-30

    入選理由:

    安全提交前檢查小範圍差異的第一手參考。

    來源前置條件:

    Git 基礎知識

    安全回退方案(離線彈性):

    在本機使用 `git diff` 與 `git status`;理解差異之前不要提交。

    對比候選資源與選型分析 (2)
    git-diff command reference ↗ compared_alternative [Git documentation (GPL-2.0)]

    這是命令選項層級的參考;選擇 Pro Git 章節,是因為它逐步引導讀者在提交前檢查修改。

    Atlassian Git tutorials: git diff ↗ compared_alternative [All Rights Reserved]

    這是易讀的商業教學;針對同樣的修改檢查習慣,書籍章節更深入地解釋了暫存與索引語義。

    02 120 分鐘

    相等性、物件識別與誤導性輸入

    獨立掌握檢查 — 評量作業期間不得使用 AI 輔助。若接受任何輔助必須如實申報,但接受輔助的作業只計為補救練習:在聲稱掌握之前,必須完成一次新的無輔助檢查。

    前置要求

    已完成活動 1(原地修改與重新綁定);Day 04 的值與型別檢查。

    學習目標

    用 == 比較值、用 is 比較物件識別(尤其是 is None),並用輸出證據揭示誤導性輸入,例如文字 "3" 與整數 3 的區別。

    操作指引

    必做:
    1. 為四行輸出中的每一個值寫下預測。
    2. 將程式儲存為 compare.py 並執行,把實際輸出原樣記錄在預測旁邊。
    3. 解釋為什麼 [1] == [1] 為 True,而 [1] is [1] 為 False。
    4. 解釋為什麼文字看起來是 3,raw == 3 卻為 False,以及 int(raw) 改變了什麼。
    5. 解釋為什麼建議用 value is None 來判斷 None。

    選做(僅在必做證據完成之後):把 raw 依序改為 " 3 " 和 "3.0",每次先預測 int(raw) 的結果再執行。

    自主實作與記錄

    先預測每一個值,然後執行程式。raw 代表使用者輸入 3 時 input() 回傳的內容:input() 總是回傳字串。

    print(1 == True, 0 == False)
    print([1] == [1], [1] is [1])
    raw = "3"
    print(raw == 3, int(raw) == 3)
    value = None
    print(value is None)

    客觀知識測驗與診斷追蹤

    請回答以下題目檢驗掌握情況。提交前請誠實聲明你的輔助條件。

    聲明輔助條件

    說明:無 AI 輔助屬於誠實聲明條件,非平台監控或強制檢測手段。

    1.

    為什麼建議寫 if value is None: 而不是 if value == None:?

    作答應證與歷史記錄

      掌握標準

      在沒有 AI 輔助的情況下,四行輸出都有預測和準確的實際輸出,解釋能正確區分值相等(==)與物件識別(is),指出 str 與 int 的不相符,並說明使用 is None 的理由。

      權威來源資源與權利證明

      linking PSF License Version 2

      Python Standard Library: Built-in Types

      作者 / 機構: Python Software Foundation | 原始出處連結 ↗

      對應章節 / 時間戳: 相關章節:真值檢驗、比較、可變序列型別

      驗證版本與日期: Python 3.12 documentation (verified 2026-10-30)

      入選理由:

      用於核對真值檢驗、比較、綁定與原地修改行為的規範性參考。

      來源前置條件:

      Day 03 補救練習

      安全回退方案(離線彈性):

      執行所附 Python 範例,並查閱本機已安裝直譯器的說明。

      對比候選資源與選型分析 (2)
      Python Data Model reference ↗ compared_alternative [PSF License Version 2]

      該參考深入講解物件語義,超出了運算式練習所需的深度;選擇 stdtypes 可將範圍限定在運算子層面的內容。

      The Python Tutorial: An Informal Introduction ↗ compared_alternative [PSF License Version 2]

      這是對相同運算子的敘述性入門講解;選擇函式庫參考作為正式規範的依據。

      linking CC BY-NC-SA 3.0 (book) noncommercial share-alike

      Git User Manual: Recording Changes

      作者 / 機構: Git project | 原始出處連結 ↗

      對應章節 / 時間戳: 「記錄對儲存庫的修改」一節

      驗證版本與日期: Verified 2026-10-30

      入選理由:

      安全提交前檢查小範圍差異的第一手參考。

      來源前置條件:

      Git 基礎知識

      安全回退方案(離線彈性):

      在本機使用 `git diff` 與 `git status`;理解差異之前不要提交。

      對比候選資源與選型分析 (2)
      git-diff command reference ↗ compared_alternative [Git documentation (GPL-2.0)]

      這是命令選項層級的參考;選擇 Pro Git 章節,是因為它逐步引導讀者在提交前檢查修改。

      Atlassian Git tutorials: git diff ↗ compared_alternative [All Rights Reserved]

      這是易讀的商業教學;針對同樣的修改檢查習慣,書籍章節更深入地解釋了暫存與索引語義。

      03 120 分鐘

      初學者錯誤診所:SyntaxError、str 與 int、None

      Agent 輔助工程檢查 — 可以請已授權的程式設計 Agent 協助診斷,但須宣告所用工具、允許它讀取或修改的範圍以及審查邊界。每個初始檔案和修正版都必須由你親自執行,每處差異都必須由你親自審查;Agent 的產出不構成獨立證據。若無已授權的工具可用,請手動完成本診所練習,並將 Agent 部分記錄為「受阻 — 未執行」。

      前置要求

      已完成活動 1–2;能夠讀懂回溯訊息(traceback)的最後一行,並能用 `diff` 或 `git diff` 比較兩個檔案。

      學習目標

      用完整的初始檔案重現三種典型的初學者錯誤,在修改前說出每種錯誤的類別,做最小修正,並用修正後的輸出和邊界情況加以確認。

      操作指引

      必做:
      1. 將練習中的三個初始檔案按原樣儲存。
      2. 執行每個檔案之前先寫下預測:它會不會失敗?如果會,屬於哪一類(語法錯誤、型別/值不相符、對 None 的無效操作)?
      3. 執行每個初始檔案,原樣抄下錯誤的最後一行或印出的輸出。
      4. 用最小改動修正每個檔案,分別儲存為 fixed_syntax.py、fixed_compare.py、fixed_none.py,用 diff -u starter_x.py fixed_x.py(或 git diff)比較,然後執行修正後的檔案。
      5. 對於比較錯誤,修正後執行兩個邊界情況 raw = "4" 和 raw = "three",並寫明程式接受哪些輸入。
      6. 如果使用了 Agent,記錄所用工具、權限、它的建議,以及你驗證或拒絕了哪條建議。

      選做(僅在必做證據完成之後):讓比較程式在遇到非數字文字時給出清楚的提示並拒絕,而不是拋出回溯訊息。

      自主實作與記錄

      三個完整的初始程式,每個恰好包含一個錯誤:

      starter_syntax.py

      score = 3
      if score = 3:
      print("passed")

      starter_compare.py (raw 代表使用者輸入 3 時 input() 回傳的內容)

      raw = "3"
      if raw == 3:
      print("passed")
      else:
      print("not passed:", repr(raw), type(raw).__name__)

      starter_none.py

      items = None
      items.append(1)
      print(items)

      逐一執行,說出錯誤類別,修正它,並列出修正後的輸出。

      客觀知識測驗與診斷追蹤

      請回答以下題目檢驗掌握情況。提交前請誠實聲明你的輔助條件。

      聲明輔助條件

      說明:無 AI 輔助屬於誠實聲明條件,非平台監控或強制檢測手段。

      1.

      starter_compare.py 執行時沒有任何報錯,卻印出 not passed: '3' str。這屬於哪一類錯誤?

      作答應證與歷史記錄

        掌握標準

        三個初始檔案都記錄了預測、準確的錯誤行或輸出、錯誤類別、最小差異和修正後的輸出;比較錯誤的修正已用 raw = "4" 和 raw = "three" 驗證;如使用了 Agent,已申報工具、權限和審查邊界。

        權威來源資源與權利證明

        linking PSF License Version 2

        Python Standard Library: Built-in Types

        作者 / 機構: Python Software Foundation | 原始出處連結 ↗

        對應章節 / 時間戳: 相關章節:真值檢驗、比較、可變序列型別

        驗證版本與日期: Python 3.12 documentation (verified 2026-10-30)

        入選理由:

        用於核對真值檢驗、比較、綁定與原地修改行為的規範性參考。

        來源前置條件:

        Day 03 補救練習

        安全回退方案(離線彈性):

        執行所附 Python 範例,並查閱本機已安裝直譯器的說明。

        對比候選資源與選型分析 (2)
        Python Data Model reference ↗ compared_alternative [PSF License Version 2]

        該參考深入講解物件語義,超出了運算式練習所需的深度;選擇 stdtypes 可將範圍限定在運算子層面的內容。

        The Python Tutorial: An Informal Introduction ↗ compared_alternative [PSF License Version 2]

        這是對相同運算子的敘述性入門講解;選擇函式庫參考作為正式規範的依據。

        linking CC BY-NC-SA 3.0 (book) noncommercial share-alike

        Git User Manual: Recording Changes

        作者 / 機構: Git project | 原始出處連結 ↗

        對應章節 / 時間戳: 「記錄對儲存庫的修改」一節

        驗證版本與日期: Verified 2026-10-30

        入選理由:

        安全提交前檢查小範圍差異的第一手參考。

        來源前置條件:

        Git 基礎知識

        安全回退方案(離線彈性):

        在本機使用 `git diff` 與 `git status`;理解差異之前不要提交。

        對比候選資源與選型分析 (2)
        git-diff command reference ↗ compared_alternative [Git documentation (GPL-2.0)]

        這是命令選項層級的參考;選擇 Pro Git 章節,是因為它逐步引導讀者在提交前檢查修改。

        Atlassian Git tutorials: git diff ↗ compared_alternative [All Rights Reserved]

        這是易讀的商業教學;針對同樣的修改檢查習慣,書籍章節更深入地解釋了暫存與索引語義。

        04 120 分鐘

        複習:追蹤表、四個比較預測與預防規則

        獨立掌握檢查 — 評量作業期間不得使用 AI 輔助。若接受任何輔助必須如實申報,但接受輔助的作業只計為補救練習:在聲稱掌握之前,必須完成一次新的無輔助檢查。

        前置要求

        已完成活動 1–3,並已記錄錯誤診所的證據。

        學習目標

        獨立重現當天的證據:一張原地修改/重新綁定的兩欄追蹤表、四個先預測後驗證的比較,以及針對診所中每種錯誤的一條預防規則。

        操作指引

        必做:
        1. 在沒有 AI 輔助、且執行任何程式之前,填寫兩欄追蹤表(第 1 欄:用 append 原地修改;第 2 欄:用 a = a + [2] 重新綁定),寫出每行之後的 a、b 和 a is b。
        2. 為四個比較 1 == True、[1] == [1]、[1] is [1]、"3" == 3 寫下預測(True 或 False)。
        3. 執行練習中的程式,標出每個預測是否正確。
        4. 為診所中的三種錯誤(語法錯誤、str 與 int、None)各寫一條預防規則,並引用支持它的實際輸出行。

        選做(僅在必做證據完成之後):自己設計一個混合相等性與物件識別的新比較,先預測再驗證。

        自主實作與記錄

        先填寫追蹤表和四個預測,然後執行:

        a = [1]
        b = a
        a.append(2)
        print("mutation:", a, b, a is b)
        a = [1]
        b = a
        a = a + [2]
        print("rebinding:", a, b, a is b)
        print(1 == True)
        print([1] == [1])
        print([1] is [1])
        print("3" == 3)

        客觀知識測驗與診斷追蹤

        請回答以下題目檢驗掌握情況。提交前請誠實聲明你的輔助條件。

        聲明輔助條件

        說明:無 AI 輔助屬於誠實聲明條件,非平台監控或強制檢測手段。

        1.

        下列哪個問題問的是物件識別,而不是相等性?

        作答應證與歷史記錄

          掌握標準

          在沒有 AI 輔助的情況下:執行前的追蹤表正確,四個預測都已記錄並與實際輸出核對,三條預防規則各自引用了一行實際輸出。

          權威來源資源與權利證明

          linking PSF License Version 2

          Python Standard Library: Built-in Types

          作者 / 機構: Python Software Foundation | 原始出處連結 ↗

          對應章節 / 時間戳: 相關章節:真值檢驗、比較、可變序列型別

          驗證版本與日期: Python 3.12 documentation (verified 2026-10-30)

          入選理由:

          用於核對真值檢驗、比較、綁定與原地修改行為的規範性參考。

          來源前置條件:

          Day 03 補救練習

          安全回退方案(離線彈性):

          執行所附 Python 範例,並查閱本機已安裝直譯器的說明。

          對比候選資源與選型分析 (2)
          Python Data Model reference ↗ compared_alternative [PSF License Version 2]

          該參考深入講解物件語義,超出了運算式練習所需的深度;選擇 stdtypes 可將範圍限定在運算子層面的內容。

          The Python Tutorial: An Informal Introduction ↗ compared_alternative [PSF License Version 2]

          這是對相同運算子的敘述性入門講解;選擇函式庫參考作為正式規範的依據。

          linking CC BY-NC-SA 3.0 (book) noncommercial share-alike

          Git User Manual: Recording Changes

          作者 / 機構: Git project | 原始出處連結 ↗

          對應章節 / 時間戳: 「記錄對儲存庫的修改」一節

          驗證版本與日期: Verified 2026-10-30

          入選理由:

          安全提交前檢查小範圍差異的第一手參考。

          來源前置條件:

          Git 基礎知識

          安全回退方案(離線彈性):

          在本機使用 `git diff` 與 `git status`;理解差異之前不要提交。

          對比候選資源與選型分析 (2)
          git-diff command reference ↗ compared_alternative [Git documentation (GPL-2.0)]

          這是命令選項層級的參考;選擇 Pro Git 章節,是因為它逐步引導讀者在提交前檢查修改。

          Atlassian Git tutorials: git diff ↗ compared_alternative [All Rights Reserved]

          這是易讀的商業教學;針對同樣的修改檢查習慣,書籍章節更深入地解釋了暫存與索引語義。