深拷贝,浅拷贝

深拷贝(Deep Copy)和浅拷贝(Shallow Copy)是在编程中涉及复制对象时经常讨论的两个概念。它们描述了对象复制时是否包含对象内部嵌套的引用关系。

浅拷贝(Shallow Copy):

浅拷贝是一种复制对象的方法,其中只复制了对象的一层属性,而不会复制嵌套对象的引用。这意味着新对象和原始对象的顶层属性是彼此独立的,但如果原始对象包含嵌套对象,浅拷贝仍然会共享这些嵌套对象的引用。

示例:
const originalObject = { key1: 'value1', key2: { nestedKey: 'value2' } };

// 浅拷贝,只复制了顶层属性
const shallowCopy = { ...originalObject };

shallowCopy.key1 = 'new value';
shallowCopy.key2.nestedKey = 'new nested value';

console.log(originalObject.key1); // 输出 'value1'
console.log(originalObject.key2.nestedKey); // 输出 'new nested value'

在上面的例子中,shallowCopy 修改了顶层属性 key1,但由于嵌套对象 key2 的引用被共享,对 key2.nestedKey 的修改会影响到原始对象。

深拷贝(Deep Copy):

深拷贝是一种复制对象的方法,其中不仅复制了对象的顶层属性,还递归复制了所有嵌套对象及其内部的属性。这样,新对象和原始对象是完全独立的,对新对象的修改不会影响到原始对象。

示例:
const originalObject = { key1: 'value1', key2: { nestedKey: 'value2' } };

// 浅拷贝,只复制了顶层属性
const shallowCopy = { ...originalObject };

shallowCopy.key1 = 'new value';
shallowCopy.key2.nestedKey = 'new nested value';

console.log(originalObject.key1); // 输出 'value1'
console.log(originalObject.key2.nestedKey); // 输出 'new nested value'

在这个例子中,deepCopy 修改了顶层属性 key1,并且由于所有嵌套对象都被复制了一份,对 key2.nestedKey 的修改不会影响到原始对象。

需要注意的是,深拷贝的实现方式可能会因语言和库的不同而异。上述示例中使用了 JSON 序列化和反序列化的方法,这适用于简单的对象结构,但对于包含函数、循环引用等情况,可能需要使用更复杂的深拷贝方法。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值