大佬教程收集整理的这篇文章主要介绍了浅拷贝与深拷贝,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
写在前面
原文出处,原文大佬讲的很细致明了,此文相当于读书笔记
拷贝的概念用于引用数据类型(真实的数据存放在堆内存当中),浅拷贝类似于变量的赋值,只是将内部的值 copy 一份,但并不要将浅拷贝的理解止步于此,不然会出问题的!
程序中的数据可以分为两类:
上文说到过,浅拷贝类似于赋值。赋值的概念是对于基本数据类型来说的,他们的值都存在栈中,将一个基本数据类型变量值赋给另外一个基本数据类型变量时,编译器会完全复制他所指向栈地址当中所保存的数据,而基本数据类型指向的栈中保存的就是数据实体。所以在引用类型中的基本数据类型上,浅拷贝和赋值其实是一样的。
但是!引用类型当中也可以存在其他的引用类型,对于这些数据跟上面就有区别了。
引用类型的浅拷贝依然是复制其在栈中的值,但是引用类型指向的栈内存中存的并不是数据实体,而是该实体在堆内存中的地址,这样的拷贝就会让两个对象指向同一块堆内存当中的数据实体。那么其中一个对象对实体进行更改,势必会影响到其他同样指向该实体的对象。这也正是浅拷贝与复制的区别所在。
深拷贝较于浅拷贝就比较好理解了,他会直接把所有的数据直接新建一份一样的,这份数据在栈和堆中都是不一样的地址(尽管他们的数据都是相同的),那么这样的拷贝方式显然不会影响到原数据。
以上是大佬教程为你收集整理的浅拷贝与深拷贝全部内容,希望文章能够帮你解决浅拷贝与深拷贝所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。