Python的秘密生活:危险的反射
发布: (2026年1月8日 GMT+8 11:19)
2 min read
原文: Dev.to
Source: Dev.to
理解 Python 别名、引用以及浅拷贝的陷阱
Timothy 需要向列表中添加临时客人,但不想修改原始的 master_list。他以为把列表赋值给新变量就会创建一个副本:
# Timothy's "Safety" Plan
master_list = ["Alice", "Bob", "Carol"]
draft_list = master_list
注意: 上述所有方法都会产生 浅拷贝。对于只包含不可变对象(例如字符串、数字)的列表,这已经足够。如果列表中包含可变对象(例如其他列表、字典),内部对象仍然是共享的。在这种情况下需要使用 深拷贝(
copy.deepcopy)。
要点
- 赋值 (
b = a) 只会创建别名,而不是副本。 - 使用切片、
.copy()或list()构造函数可以得到浅拷贝。 - 处理嵌套的可变结构时,要注意浅拷贝的局限性。
“名字不是事物本身,地图也不是领土。” – Margaret
下一集: “套娃陷阱” – 探索深拷贝和嵌套可变对象。