深拷贝和浅拷贝的区别是什么

深拷贝和浅拷贝是指在赋值一个对象时,拷贝的深度不同。区别是浅拷贝是拷贝了对象的引用,当原对象发生变化的时候,拷贝对象也跟着变化;深拷贝是另外申请了一块内存,内容和原对象一样,更改原对象,拷贝对象不会发生变化。

深拷贝和浅拷贝的区别是什么-Worktile社区

浅拷贝

有两种方式,一种是把一个对象里面的所有的属性值和方法都复制给另一个对象,另一种是直接把一个对象赋给另一个对象,使得两个都指向同一个对象。

深拷贝

把一个对象的属性和方法一个个找出来,在另一个对象中开辟对应的空间,一个个存储到另一个对象中。

两者区别

两者区别就在于,浅拷贝只是简单的复制,对对象里面的对象属性和数组属性只是复制了地址,并没有创建新的相同对象或者数组。而深拷贝是完完全全的复制一份,空间大小占用一样但是位置不同!浅拷贝是拷贝了对象的引用,当原对象发生变化的时候,拷贝对象也跟着变化;深拷贝是另外申请了一块内存,内容和原对象一样,更改原对象,拷贝对象不会发生变化。

深拷贝和浅拷贝是指在赋值一个对象时,拷贝的深度不同。

在进行深拷贝时,会拷贝所有的属性,并且如果这些属性是对象,也会对这些对象进行深拷贝,直到最底层的基本数据类型为止。这意味着,对于深拷贝后的对象,即使原对象的属性值发生了变化,深拷贝后的对象的属性值也不会受到影响。

相反,浅拷贝只会拷贝对象的名列前茅层属性,如果这些属性是对象,则不会对这些对象进行拷贝,而是直接复制对象的引用。这意味着,对于浅拷贝后的对象,如果原对象的属性值发生了变化,浅拷贝后的对象的属性值也会跟着发生变化。

延伸阅读:

什么是深拷贝?

一个引用对象一般来说由两个部分组成:一个具名的Handle,也就是我们所说的声明(如变量)和一个内部(不具名)的对象,也就是具名Handle的内部对象。它在Manged Heap(托管堆)中分配,一般由新增引用对象的New方法是进行创建。深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响。比较典型的就是Value(值)对象,如预定义类型Int32,Double,以及结构(struct),枚举(Enum)等。

如果在类中没有显式地声明一个拷贝构造函数,那么,编译器将会自动生成一个默认的拷贝构造函数,该构造函数完成对象之间的位拷贝。位拷贝又称浅拷贝,浅拷贝会带来数据安全方面的隐患。在进行赋值之前,为指针类型的数据成员另辟了一个独立的内存空间,实现真正内容上的拷贝。这种拷贝称为深拷贝。深拷贝有两种方式实现:层层clone的方法和利用串行化来做深拷贝。层层clone的方法:在浅拷贝的基础上实现,给引用类型的属性添加克隆方法,并且在拷贝的时候也实现引用类型的拷贝。此种方法由于要在多个地方实现拷贝方法,可能会造成混论。利用串行化来做深拷贝:为避免复杂对象中使用clone方法可能带来的换乱,可以使用串化来实现深拷贝。先将对象写到流里,然后再从流里读出来。

文章标题:深拷贝和浅拷贝的区别是什么,发布者:小编,转载请注明出处:https://worktile.com/kb/p/37347

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小编小编认证作者
上一篇 2023年2月7日 下午10:08
下一篇 2023年2月7日 下午10:11

相关推荐

  • 需求管理的挑战有哪些

    需求管理是项目成功的关键,却面临许多挑战。核心挑战包括1、变更控制的复杂性、2、需求的沟通障碍、3、需求不明确与变化、4、利益相关者的参与度。变更控制的复杂性导致难以追踪需求的演变,而沟通障碍阻碍了准确理解需求。需求的不明确与频繁变化增加了项目的不确定性,同时利益相关者的参与度不足可能导致需求不被充…

    2023年12月18日
    28900
  • 想系统的学习数据库,有什么建议

    建议包括以下:一、基础知识;二、学习顺序;三、学习工具;四、实践和项目;五、持续学习。在学习数据库之前,需要掌握一些基础知识,如计算机组成原理、操作系统、数据结构和编程语言等。这些基础知识对于理解数据库的原理和应用至关重要。 一、基础知识 在学习数据库之前,需要掌握一些基础知识,如计算机组成原理、操…

    2023年5月30日
    36000
  • xdf oa系统

    标题:XDF OA系统的关键特性与实施效益 直击关键点:XDF(新东方)在线办公自动化(OA)系统集成了1、任务自动化管理、2、流程电子化优化、3、协同工作平台、4、数据安全保障。在其中流程电子化优化对提升工作效率、减少人为错误做出巨大贡献,通过将传统纸质流程转为电子流程,既提高了处理速度,又增强了…

    2024年1月15日
    54000
  • vscode为什么要开源

    VSCode(Visual Studio Code)开源的核心原因主要包括促进社区参与、技术透明和共享、快速迭代和改进、以及推动生态系统的发展。开源允许开发者查看、修改和贡献代码,使VSCode能够迅速集成开发者社区的创新想法和功能。社区参与是VSCode开源策略中的关键,它通过吸引全球的开发者为产…

    2024年4月3日
    8400
  • DevOps项目中的风险评估技巧

    摘要: DevOps项目在实施中可能会面临很多潜在的风险,进行有效的风险评估是确保项目成功的关键。该文章探讨了1、建立跨功能团队、2、持续集成和持续交付(CI/CD)、3、自动化测试、4、监控和日志管理、5、安全和合规性、6、变更管理等核心技巧。建立跨功能团队增强团队成员间的沟通与协作,实现快速反馈…

    2023年12月13日
    34000
  • 如何做好项目沟通管理

    做好项目沟通管理的技巧:1、制定切实可行的沟通计划;2、选择合适的项目沟通的方式;3、建立优质的沟通基础;4、营造良好的沟通氛围;5、带着目标问题沟通;6、反馈跟进,闭环管理。制定切实可行的沟通计划是做好项目沟通管理的基础。 1、制定切实可行的沟通计划 在一个比较完整的沟通管理体系中,应该包含以下几…

    2023年2月28日
    63100
  • 后端数据库怎么和前端APP相连接

    为确保前端APP与后端数据库的有效连接,需执行以下五个关键步骤:1.选择合适的数据库;2.构建服务器端应用;3.定义API接口;4.前端调用API;5.确保数据安全和效率。在构建连接之初,首先要明确数据库类型与选择。有关系型数据库如MySQL、PostgreSQL、Oracle等;还有非关系型数据库…

    2023年7月12日
    68200
  • 项目前期总监如何管理工作

    项目前期总监在管理工作时应致力于确保项目成功铺设基础。首要职责包括:制定详尽的项目计划、明确项目范围、确保资源的有效配置、与团队和利益相关者沟通、监控和调整项目进度、确保质量控制。在这些高层次目标中,制定详尽的项目计划是至关重要的一步,它包括确定项目目标、任务、时间表、成本预估和风险分析。 一、项目…

    2024年4月11日
    4600
  • devops什么意思中文翻译

    DevOps解释为一种高效的软件开发及交付过程,联合开发(Development)与运作(Operations)的概念,旨在缩短系统开发生命周期,提供高质量软件。在这个定义中,尤为关键的是其强调的是速度与质量的平衡。由此展开的是,DevOps并不是单一工具或者技术,而是涉及到软件开发生命周期的各个方…

    2024年3月26日
    7100
  • devops 需要会什么

    DevOps领域要求掌握的技能广泛,涵盖自动化、编程、系统运维、项目管理至软件部署与监控等多个方面。紧跟这一跨学科领域发展的必备能力包括版本控制、编码与脚本编写、持续集成与持续部署、自动化测试、系统管理与监控。详解如下: 版本控制:版本控制是维护软件产品开发的完整性与追溯性的关键手段。使用如Git这…

    2024年3月26日
    7500

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部