深拷贝与浅拷贝

一.浅拷贝

直接将一个引用数据类型的地址,赋值给另一个变量存储的,称为浅拷贝

                 

上图所示,我们发现:操作数组arr1,arr2也会改变

这是为什么呢?

分析:

1)arr1 存储的内存地址,赋值给arr2,两个变量存储的是相同的内存地址,var arr2 = arr1

2因为arr1与arr2,同时存储的是相同的内存地址,所以操作的也就是同一个数组

3同理,操作数组arr2,arr1也会改变

问题?

如果要操作一个数组,另一个不发生改变,可以怎么做?

(这就是我们接下来要讲解的内容)

二.深拷贝

只复制引用数据类型中的数值而不是复制地址称为深拷贝

                

如图所示,我们利用深拷贝的方法解决了上边的问题

分析:

(1)建立一个独立的变量,复制引用数据类型中的数据内容

(2)现在它们存储的就不是相同的内存地址了,所以对数组arr1操作arr2不发生变化

三.总结

浅拷贝直接赋值赋值的是内存地址赋值之后 两个变量使用的相同内容,一个操作,另一个也会改变

深拷贝循环遍历获取引用数据类型中存储的每一个数据信息赋值到新的变量中赋值之后两个变量,没有任何关系

 

posted @ 2020-03-22 20:40  郭开心  阅读(154)  评论(0)    收藏  举报