Skip to content
On this page

深拷贝与浅拷贝


标签:Computer/lang  

已经不止在一门语言遇到过深拷贝(deep copy)和浅拷贝(shadow copy)的区别,这应该是基本所有编程语言都会具有的概念吧。

这个区别通常在封装类型变量拷贝的时候提及。简单来说,浅拷贝就是拷贝了对象的指针,当拷贝或者被拷贝对象被修改的时候,另一个也会发生变化,这是因为两者指向的内存空间地址相同,指的是同一块内存空间。

而深拷贝在拷贝的时候是复制了对应的内存,拷贝的变量指针指向的是新的内存空间,两者之间是独立的。实现深拷贝,通常需要在重写赋值的运算符或者拷贝构造函数。

深拷贝和浅拷贝没有优劣之分,前者保证了安全,后者节省了空间。另外还有写时拷贝的方法,即只读的时候使用浅拷贝,当修改属性的时候再进行内存中的复制。写时拷贝在特定语言中的实现方法这里就不展开讲了。

Last updated: