WebForm——浅拷贝与深拷贝

允我心安 提交于 2019-12-28 16:53:01

注:本文整理来自连接 https://www.cnblogs.com/echolun/p/7889848.html ,感谢博主的分享

总结:

1、浅拷贝:只拷贝变量的名,而不拷贝变量的值——常为引用类型,变量的值为一个路径,路径不变,指向的永远是同一个值,不管值是否改变

深拷贝:既拷贝变量的名,同时拷贝变量的值——常为引用类型

2、一个简单而又行之有效的深拷贝方法(借助类型转换):

var B = A;
B = JSON.stringify(B);
B = JSON.parse(B);

 

a.基本类型--名值存储在栈内存中,例如let a=1;

当你b=a复制时,栈内存会新开辟一个内存,例如这样:

 

b.引用数据类型--名存在栈内存中,值存在于堆内存中,但是栈内存会提供一个引用的地址指向堆内存中的值

当b=a进行拷贝时,其实复制的是a的引用地址,而并非堆里面的值。

而当我们a[0]=1时进行数组修改时,由于a与b指向的是同一个地址,所以自然b也受了影响,这就是所谓的浅拷贝了。

 

那,要是在堆内存中也开辟一个新的内存专门为b存放值,就像基本类型那样,岂不就达到深拷贝的效果了

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!