> 文章列表 > 公开深拷贝和浅拷贝的区别

公开深拷贝和浅拷贝的区别

公开深拷贝和浅拷贝的区别

深拷贝和浅拷贝是编程中常用的两种对象复制方法,它们的主要区别在于复制对象内容的深度和方式:

浅拷贝(Shallow Copy)

定义 :浅拷贝创建一个新对象,但只复制原对象的引用(地址),不复制对象本身。

特点 :

新旧对象共享同一块内存地址。

如果原对象包含引用类型属性,则新对象和原对象将共享这些引用的内存地址。

影响 :

对原对象的引用类型属性进行修改,会直接影响到浅拷贝得到的新对象。

适用场景 :

当不需要完全独立的对象副本时,可以使用浅拷贝,因为它更节省资源。

深拷贝(Deep Copy)

定义 :深拷贝创建一个新对象,并递归地复制原对象的所有属性,包括嵌套的对象和引用类型属性。

特点 :

新旧对象不共享内存地址。

对原对象的任何修改都不会影响到深拷贝得到的新对象。

影响 :

对新对象的引用类型属性进行修改,不会影响到原对象。

适用场景 :

当需要完全独立的对象副本,且原对象较大或包含复杂结构时,应使用深拷贝。

示例

假设有一个包含引用类型属性的对象`Person`:

```javascriptclass Person { constructor(name, address) { this.name = name; this.address = address; }}let person1 = new Person(\'Alice\', \'123 Main St\');let person2 = Object.assign({}, person1); // 浅拷贝let person3 = JSON.parse(JSON.stringify(person1)); // 深拷贝```

`person1`和`person2`是浅拷贝关系,`person1.address`指向同一个内存地址。

`person1`和`person3`是深拷贝关系,`person1.address`指向不同的内存地址。

总结

选择浅拷贝还是深拷贝取决于是否需要两个对象完全独立。浅拷贝节省资源但可能导致对象间相互影响,深拷贝创建完全独立的副本但开销较大。

其他小伙伴的相似问题:

深拷贝和浅拷贝在C++中的实现有何不同?

Java中深拷贝和浅拷贝的区别是什么?

如何避免浅拷贝导致的对象间相互影响?

稠州游戏中心