浅拷贝我的理解就是只是一个引用指向,内存里面并没有开辟一个新的空间,也就是一个快捷方式。
而深拷贝是不光创建了一个新的指向,同时这个指向一个新的内存空间,这个空间的内容和之前被拷贝的空间内容是一样的。
不知道我的理解是否正确。
有没有大神用代码示例演示下:
浅拷贝我的理解就是只是一个引用指向,内存里面并没有开辟一个新的空间,也就是一个快捷方式。
而深拷贝是不光创建了一个新的指向,同时这个指向一个新的内存空间,这个空间的内容和之前被拷贝的空间内容是一样的。
不知道我的理解是否正确。
有没有大神用代码示例演示下:
浅拷贝就是
Object A = new Object();
Object B = A;
深拷贝就是把
Object B = new Object;
然后把A里面的每一个属性都复制过去。
是和A独立开来的。
概念的理解
:
1.深拷贝和浅拷贝只针对像Object, Array这样的引用类型数据。
2.浅拷贝是对对象引用地址进行拷贝,拷贝后,改其中一个对象的属性,则另一个对象的属性也会改变。
3.深拷贝会新开一个引用地址进行拷贝,拷贝后,修改一个对象的属性,不会改变另一个对象的属性。
浅拷贝的例子
:
var obj = {a:1, b:2};
var obj2 = obj;
obj2.a = 3;
console.log(obj.a); // 3
深拷贝的例子
:
var obj2 = Object.assign({},obj);
obj2.a = 3;
console.log(obj.a); // 1
改变了obj2的a属性,但obj的a并没有发生变化。
首先,浅拷贝也是会占用内存的,但是占用的内存相对较小。
const objectA = {
name: 'test',
obj: {
name: 'test2',
},
}
/* 浅拷贝 */
const objectB = Object.assign({}, objectA)
/* 深拷贝 */
const objectC = Object.assign({}, objectA)
objectC.obj = Object.assign({}, objectA.obj)
/* 三个输出看起来都跟A一样 */
console.log(objectA, objectB, objectC)
/* 对比AB */
/* 输出: false true true */
console.log(
objectA === objectB,
objectA.name === objectB.name,
objectA.obj === objectB.obj, // B里面的obj,还是原来的obj
)
/* 对比AC */
/* 输出: false true false */
console.log(
objectA === objectC,
objectA.name === objectC.name,
objectA.obj === objectC.obj, // C里面的obj,已经是一个新的对象,不再是原来的obj
)
上面的demo可以看到,对于基本类型跟普通变量赋值,深浅拷贝最主要的区别在于Object
(注意数组也是Object
):
浅拷贝,只是吧第一层的所有值,做了简单的赋值操作。
深度拷贝,会把嵌套的对象重新生成一摸一样结构
的新对象
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决