浅拷贝和深拷贝
在 Python 中,深拷贝(deep copy)、浅拷贝(shallow copy)和赋值(assignment)有不同的行为,主要体现在对对象及其内容的引用方式上。
赋值(Assignment):
- 赋值操作(例如 a = b)并不会创建对象的副本,而是让 a 和 b 引用同一个对象。这意味着如果通过 a 修改对象的内容,b 也会受到影响,因为它们指向同一个内存地址。
python
a = [1, 2, 3]
b = a
b[0] = 99
print(a) # 输出: [99, 2, 3]
浅拷贝(Shallow Copy):
- 浅拷贝会创建一个新的对象,但不会递归复制内部对象。它仅复制最外层的对象,而内部对象仍然是引用。可以使用 copy 模块中的 copy() 方法来实现。
python
import copy
a = [1, 2, [3, 4]]
b = copy.copy(a)
b[0] = 99
b[2][0] = 88
print(a) # 输出: [1, 2, [88, 4]]
深拷贝(Deep Copy):
- 深拷贝会创建一个新的对象,并递归地复制所有内部对象。这样,原对象和新对象之间完全独立,可以使用 copy 模块中的 deepcopy() 方法来实现。
python
import copy
a = [1, 2, [3, 4]]
b = copy.deepcopy(a)
b[0] = 99
b[2][0] = 88
print(a) # 输出: [1, 2, [3, 4]]
总结
- 赋值:创建一个新的引用,指向同一对象。
- 浅拷贝:创建一个新的对象,拷贝外层对象,内部对象仍是引用。
- 深拷贝:创建一个新的对象,递归拷贝所有层级的对象,完全独立。
标签:
深拷贝和浅拷贝
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律