代码编织梦想

深浅拷贝在MDN官方中的表述是这样的:
对象的深拷贝是指其属性与其拷贝的源对象的属性不共享相同的引用(指向相同的底层值)的副本。因此,当你更改源或副本时,可以确保不会导致其他对象也发生更改;也就是说,你不会无意中对源或副本造成意料之外的更改。这种行为与浅拷贝的行为形成对比,在浅拷贝中,对源或副本的更改可能也会导致其他对象的更改(因为两个对象共享相同的引用)。
对象的浅拷贝是其属性与拷贝源对象的属性共享相同引用(指向相同的底层值)的副本。因此,当你更改源或副本时,也可能导致其他对象也发生更改——也就是说,你可能会无意中对源或副本造成意料之外的更改。这种行为与深拷贝的行为形成对比,在深拷贝中,源和副本是完全独立的。
简单来说,深拷贝是指将对象的属性和方法都拷贝一份,然后存储到另外一个地址,这样的话,无论你怎么修改原对象,拷贝之后的值都不会改变的
在这里插入图片描述

而浅拷贝是仅拷贝一份原函数的地址,传给调用函数。这样的话,调用的对象还是原对象的地址存放的值,故在修改对象方法或属性时会改变原对象。
在这里插入图片描述

学过C语言的都知道函数当中有两种调用参数方式,分别是传值调用引用调用它和深浅拷贝有异曲同工之妙,其中,传值调用是将原来对象的值传递给新的对象,将值拷贝一份,这样就有两份值,分别指向拷贝前后的对象,无论拷贝之后的值如何修改,都不会改被拷贝对象的值。在此与深拷贝相同。
而引用调用是将原来对象的值不变,将值的地址拷贝一份传给新的对象。这样新的对象也可以调用值,但是如果做出修改,原对象的值也会发生改变。因为两个对象的值存放地址是同一个。
在函数调用中,值调用方式将实参的值传给形参,下面所定义的函数foo为值调用方式,函数g的第一个参数采用值调用,第二个参数采用引用调用方式传递数据。若有表达式y=foo(2),则foo调用执行之后,y被赋值为 7

foo(int x)
int b = x - 1;
g(x,b);
return b + x;
g(int b, int &x)
b = b + 1;
x = 2 * b - x;
return;

因为第二个函数是引用调用,所以返回的值将foo()函数中的值也改变了。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_70876597/article/details/130840314

【leetcode刷题】算法:最长公共前缀-爱代码爱编程

文章目录 一、题目描述二、解题思路2.1 解法12.2 解法22.3 解法32.4 解法4 三、结果提交 一、题目描述 二、解题思路 2.1 解法1 class Solution:

最短路径问题-爱代码爱编程

如图,设定源点为D,终点为A,则D到A的最短路径是多少?  算法思路: 第一步,从源点D出发,此时能到达的选择是C和E,我们根据路径长度选择最少的作为下一个节点,于是选择C, 第二步,到达C后,标记C已经走过了,后续再做选择时,排除C。然后将所有C能到达的节点告知D,也就是B、F、E。由D来分辨,B、F、E这些点,是通过C节点路最短,还是D现有方

【数据结构】树,二叉树,满二叉树,完全二叉树的定义和二叉树的基本操作-爱代码爱编程

🎊专栏【数据结构】 🍔喜欢的诗句:更喜岷山千里雪 三军过后尽开颜。 🎆音乐分享【勋章】 大一同学小吉,欢迎并且感谢大家指出我的问题🥰 目录 ⭐树 🏳️‍🌈定义  🏳️‍🌈注意 🍔树的基本术语 ⭐二叉树 🏳️‍🌈定义 🎆二叉树和树的区别 🏳️‍🌈二叉树的性质 ⭐满二叉树 ⭐完全二叉树 🎁遍历二叉树 🎈先序遍历二

路径规划算法:基于绯鲵鲣算法的路径规划算法-爱代码爱编程

路径规划算法:基于绯鲵鲣优化的路径规划算法- 附代码 文章目录 路径规划算法:基于绯鲵鲣优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MA

juc学习(一)-爱代码爱编程

目录 多线程并发与并行顺序执行并发执行并行执行 锁机制重量级锁轻量级锁偏向锁锁消除和锁粗化 JMM内存模型Java内存模型重排序volatile关键字