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

      智能体辅助工程检查 — 可以请已授权的编程智能体协助诊断,但须声明所用工具、允许它读取或修改的范围以及审查边界。每个初始文件和修复版都必须由你亲自运行,每处差异都必须由你亲自审查;智能体的输出不构成独立证据。若无已授权的工具可用,请手动完成本诊所练习,并将智能体部分记录为“受阻 — 未执行”。

      前置要求

      已完成活动 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. 如果使用了智能体,记录所用工具、权限、它的建议,以及你验证或拒绝了哪条建议。

      选做(仅在必做证据完成之后):让比较程序在遇到非数字文本时给出清楚的提示并拒绝,而不是抛出回溯信息。

      自主演练与记录

      三个完整的初始程序,每个恰好包含一个错误:

      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" 验证;如使用了智能体,已申报工具、权限和审查边界。

        权威源资源与权利证明

        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]

          这是易读的商业教程;针对同样的修改检查习惯,书籍章节更深入地解释了暂存与索引语义。