龙空技术网

每日一问(三)深拷贝和浅拷贝的区别

码农元旦 105

前言:

今天大家对“深复制和浅复制”大概比较着重,看官们都想要剖析一些“深复制和浅复制”的相关资讯。那么小编同时在网摘上网罗了一些对于“深复制和浅复制””的相关知识,希望大家能喜欢,同学们一起来学习一下吧!

1.浅拷贝的定义

创建一个新对象,然后将当前对象的非静态字段复制到该新对象,如果字段是值类型的,那么对该字段执行复制;如果该字段是引用类型的话,则复制引用但不复制引用的对象。因此,原始对象及其副本引用同一个对象

简而言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象

2.深拷贝的定义

深拷贝是一个整个独立的对象拷贝,深拷贝会拷贝所有的属性,并拷贝属性指向的动态分配的内存。当对象和它所引用的对象一起拷贝时即发生深拷贝。深拷贝相比于浅拷贝速度较慢并且花销较大。

创建一个新对象,然后将当前对象的非静态字段复制到该新对象,无论该字段是值类型的还是引用类型,都复制独立的一份。当你修改其中一个对象的任何内容时,都不会影响另一个对象的内容。

简而言之,深拷贝把要复制的对象所引用的对象都复制了一遍。

浅拷贝只是复制了对象的引用地址,两个对象指向同一个内存地址,所以修改其中任意的值,另一个值都会随之变化,这就是浅拷贝(例:assign())

深拷贝是将对象及值复制过来,两个对象修改其中任意的值另一个值不会改变,这就是深拷贝(例:JSON.parse()和JSON.stringify(),但是此方法无法复制函数类型)

标签: #深复制和浅复制