当前位置: 首页 > news >正文

深拷贝和浅拷贝

深拷贝和浅拷贝是Python中复制对象的两种不同方式,它们的主要区别在于复制的对象内部是否包含对其他对象的引用,以及这些引用对象是否也被复制。下面详细解释这两种拷贝的区别:

浅拷贝 (Shallow Copy)

浅拷贝会创建一个新的对象,这个新的对象会包含原始对象中所有非引用类型的数据成员的副本,但对于引用类型的数据成员(如列表、字典、对象实例),它只会复制引用,而不是实际的对象。这意味着浅拷贝后的新对象和原对象在引用类型的数据成员上指向的是同一个内存地址,即它们共享这些引用类型的数据成员。

示例
import copyoriginal_list = [[1, 2], [3, 4]]
shallow_copied_list = copy.copy(original_list)# 修改浅拷贝中的嵌套列表
shallow_copied_list[0][0] = 99print(original_list)  # 输出:[[99, 2], [3, 4]]
print(shallow_copied_list)  # 输出:[[99, 2], [3, 4]]

在这个例子中,虽然shallow_copied_listoriginal_list的一个拷贝,但是当修改shallow_copied_list中的嵌套列表时,original_list也被改变了,因为它们共享相同的嵌套列表对象。

深拷贝 (Deep Copy)

深拷贝会创建一个全新的对象,并递归地复制原对象中的所有引用类型的数据成员,生成这些数据成员的独立副本。这意味着深拷贝后的新对象和原对象之间没有任何引用关系,它们是完全独立的。

示例
import copyoriginal_list = [[1, 2], [3, 4]]
deep_copied_list = copy.deepcopy(original_list)# 修改深拷贝中的嵌套列表
deep_copied_list[0][0] = 99print(original_list)  # 输出:[[1, 2], [3, 4]]
print(deep_copied_list)  # 输出:[[99, 2], [3, 4]]

在这个例子中,即使修改了deep_copied_list中的嵌套列表,original_list保持不变,因为深拷贝创建了嵌套列表的独立副本。

总结

  • 浅拷贝:快速且节省内存,但新旧对象在引用类型的数据成员上共享同一份数据,修改一方会影响另一方。
  • 深拷贝:创建完全独立的对象和数据成员,修改一方不会影响另一方,但可能消耗更多的时间和内存。

选择使用浅拷贝还是深拷贝取决于你的具体需求:如果你需要确保复制的对象与原对象完全独立,那么应该使用深拷贝;如果你只需要复制对象的顶层结构,而内部的引用类型数据成员可以共享,则可以使用浅拷贝。


http://www.mrgr.cn/news/50040.html

相关文章:

  • 金蝶K3-WISE和管易云单据接口对接
  • 荷兰Avantes光谱仪光老练日晒/紫外老化测量
  • 你不会不知道Mac的优缺点吧,详细的Mac优缺点全解析
  • 双足机器人远程操作与动态运动同步研究
  • Linux中安装 mongodb ,很详细
  • Android ViewModel
  • 全金属的两足机器人钢铁侠开发
  • 闯关leetcode——100. Same Tree
  • 2024 年主流 10 大 CRM 系统盘点
  • 33条必看问题!腾讯云认证考试须知!
  • Jmeter 获取用户数据-全部登录
  • 电脑上怎么录制高清流畅视频?录制游戏的时候很卡怎么办?
  • 从“制造”到“智造”:中图光学测量仪器的进阶与应用
  • postgresql进行几何抽稀(DP抽稀)
  • 进程地址空间
  • 自动化检查网页的TDK,python+selenium自动化测试web的网页源代码中的title,Description,Keywords
  • 电子行业技术网站
  • 【2022统考真题】计算时间复杂度
  • Spring集成Redisson及存取几种基本类型数据
  • 已解决:“发生生成错误,是否继续并运行上次的成功的生成?”无法启动程序,系统找不到指定的文件