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

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

深拷贝和浅拷贝的区别是什么-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

相关推荐

  • 什么是认知智能

    认知智能是一种模拟人类认知过程的技术,其目的是使计算机和软件能够理解、解释、和应对复杂的人类行为和决策。通过结合机器学习、人工智能和认知科学的原理,认知智能旨在模拟人脑的工作方式,为计算机提供更接近人类的思考和解决问题的能力。 一、认知智能的定义 认知智能是一种模拟人类认知过程的技术,其目的是使计算…

    2023年7月30日
    49000
  • 需求管理中的风险评估与应对策略

    需求管理中的重要环节是风险评估与制定相应的应对策略,其关键涉及:1、识别需求中的潜在风险;2、评估风险发生的概率及其潜在影响;3、制定应对规划;4、执行风险响应和监控。在这些因素中,识别需求风险为后续步骤奠定了基础。通过详实的需求分析,利用专家经验、历史数据、需求模糊性分析等手段,可以揭示需求不明确…

    2023年12月18日
    27700
  • 现在Program Synthesis业界都在做什么

    业界最有名的应用莫过于Excel的FlashFill功能。程序合成(Program synthesis)一直是学术界热门的研究方向,但它在业界的应用却不像意图识别那样普遍。这一方面是由于程序合成比较复杂,另一方面也由于它的标注和解析方面有额外的困难。 业界最有名的应用莫过于Excel的FlashFi…

    2023年2月23日
    37200
  • ThreadLocal和synchronized的区别

    ThreadLocal和synchronized的区别是:synchronized是利用锁的机制,使变量或代码块在某一时该只能被一个线程访问。从始至终,只存在一个资源,然后多个线程都去访问,那么就得排队,依次访问。而ThreadLocal可以部分解决synchronized排队问题,为每一个线程都提…

    2023年2月13日
    35400
  • java是怎么把图文夹杂的文章存储在数据库里面

    前台用富文本编辑控件,本质就是用HTML 实现 加粗、字号大小、前景、背景色等效果。后台就简单了将这些HTML片段存入数据库大字段就好了。其他需要显示文本的界面读取出来直接通过JS append到div里。 一般都是这样的,就是在你服务器有一个专门放置的文件夹,然后数据库保存的是你服务器的路径。需要…

    2023年5月29日
    33800
  • DevOps项目中的负载测试和性能优化

    DevOps项目中实施负载测试和性能优化为的是确保软件系统在预期最大负载下依然保持良好的性能和稳定性。1、预防系统过早的性能瓶颈;2、优化系统资源使用,提高用户满意度;3、确保系统可扩展性和可维护性。其中,预防系统的性能瓶颈至关重要,这涉及识别并解决可能在高负载情况下限制系统处理能力的问题。通过负载…

    2024年1月2日
    14800
  • 如何提高项目成功率?分享20 种项目管理工具、技术和软件

    本文将分享20种项目管理常用的工具、技术和软件,比如项目管理软件 PingCode、Worktile、Redmine、Jira、SAP、PrimaveraSystems等;项目计划阶段工具和技术WBS、甘特图、PERT图、风险评估矩阵等等。 项目管理是确保项目成功交付的关键,它涉及到适当的技术、工具…

    2024年2月29日
    3100
  • xml特殊字符有哪些

    xml特殊字符有五个:1、&(和号);2、<(小于);3、>(大于);4、”(双引号);5、‘(单引号)。其中,&(和号)的转义符为&amp。严格地讲,在 XML 中仅有字符 “<“和”&” 是非…

    2022年12月30日
    6.1K00
  • 产品管理中的风险管理策略是什么

    产品管理中的风险管理策略具体涉及1、风险识别与评估、2、风险预防、3、风险缓解与转移、4、风险监测与控制。这些策略旨在系统化地降低潜在的不确定性和负面影响,确保产品的顺利开发、发布和运维。通过风险识别与评估,团队能够早期发现可能危及产品成功的因素,并对其可能性与影响进行量化。在风险预防策略中,利用预…

    2023年11月15日
    29100
  • 如何配置CI/CD工具以优化研发流程

    配置CI/CD工具以优化研发流程的步骤:1、选择合适的CI/CD工具;2、设定CI/CD流程;3、持续集成;4、持续部署;5、安全与合规;6、监控和日志;7、文档和培训;8、持续改进。CI/CD是一个不断进化的领域,适应和采纳新的技术和方法对于保持竞争力至关重要,成功的CI/CD实践需要团队的共同努力和持续的改进心态。

    2023年11月12日
    22000

发表回复

登录后才能评论
站长微信
站长微信
电话联系

400-800-1024

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

分享本页
返回顶部