这套课程按知识依赖排列。本篇的前置知识是:第 06、11、13 篇。学完后,你应该能够识别共享引用并创建基础浅拷贝。
本篇要解决的问题
本篇只处理“可变对象、共享引用与浅拷贝”这一件事。示例基于 Python 3.14.6,在 macOS 环境核验;除明确标注的终端命令外,代码本身只使用 Python 标准能力。
先看清一个容易误解的细节
backup = tasks 只增加一个指向同一列表的变量名;tasks.copy() 才创建外层新列表。浅拷贝不会递归复制内部嵌套对象。
核心概念
==比较内容是否相等,is比较是否为同一个对象。- 列表和字典是常见可变对象,修改操作可能通过共享引用被其他变量观察到。
- 处理嵌套结构时需要明确浅拷贝边界,不要默认所有层级都已独立。
跟着示例运行
把下面代码保存到本课脚本并运行:
tasks = ["变量", "字符串"]
shared = tasks
backup = tasks.copy()
tasks.append("列表")
print(shared)
print(backup)
print(tasks is shared)
print(tasks is backup)
预期结果:
['变量', '字符串', '列表']
['变量', '字符串']
True
False
输出中包含环境路径、集合元素或日志格式时,具体文字和顺序可能随本机环境变化;判断是否成功应以本篇说明的关键结果为准。
按执行顺序拆开看
shared = tasks没有创建列表,只让两个名字指向同一个列表对象。backup = tasks.copy()创建新的外层列表;随后向原列表追加元素,shared能观察到变化,backup不会。
再看一个具体细节
浅拷贝遇到嵌套列表时,外层虽然分开,内部对象仍可能共享。
两边拥有不同的外层列表,但内部课程列表仍是同一个对象。修改内部列表时,两边都能观察到变化。
初学者容易混淆的地方
- 用
==判断是否同一对象。内容相等不代表身份相同,身份比较使用is。 - 把浅拷贝当作递归复制;嵌套列表中的内部对象仍可能被两边共享。
练习
- 让两个变量引用同一个字典并修改其中一个。
- 使用
copy()创建外层副本,再比较is和==。
练习应先独立完成,再通过增加 print 输出或检查文件内容观察中间状态。当前课程尚未讲到的能力,不要求提前搜索复杂写法。
本篇边界
本篇目标是识别共享引用并创建基础浅拷贝。没有展开的高级机制会放到后续课程;先确保能够解释示例中每一行代码,再进入下一篇。
相关文章
01|Python 程序从源码到输出经历了什么
面向按顺序学习 Python 的初学者,本篇在零基础上,帮助读者理解源代码、解释器和输出之间的关系。
02|在 macOS 安装并确认 Python 3 环境
面向按顺序学习 Python 的初学者,本篇在第 01 篇知识上,帮助读者在 macOS 中确认 Python 3.14 和 pip 是否可用。
03|交互式解释器和 Python 脚本怎么选择
面向按顺序学习 Python 的初学者,本篇在第 02 篇知识上,帮助读者根据任务选择 REPL 或 `.py` 脚本。
04|建立第一个 Python 项目目录
面向按顺序学习 Python 的初学者,本篇在第 03 篇知识上,帮助读者理解当前目录并正确运行项目脚本。

