协慌网

登录 贡献 社区

深拷贝和浅拷贝之间有什么区别?

深拷贝和浅拷贝之间有什么区别?

答案

广度与深度; 根据您的对象作为根节点的引用树来思考。

浅:

复制前浅层复制浅浅的

变量 A 和 B 指的是不同的存储区域,当 B 被分配给 A 时,两个变量指的是相同的存储区域。以后对其中一个内容的修改会立即反映在其他内容中,因为它们共享内容。

深:

复制前深度复制做得很好

变量 A 和 B 指的是不同的存储区,当 B 被分配给存储区中的值时,A 指向的值被复制到 B 指向的存储区中。后来对其中任何内容的修改仍然是 A 或 B 的唯一内容; 内容不共享。

浅拷贝尽可能少复制。集合的浅表副本是集合结构的副本,而不是元素。使用浅拷贝,两个集合现在共享各个元素。

深拷贝复制一切。集合的深层副本是两个集合,原始集合中的所有元素都是重复的。

简而言之,这取决于什么指向什么。在浅拷贝中,对象 B 指向对象 A 在内存中的位置。在深层复制中,对象 A 的内存位置中的所有内容都会被复制到对象 B 的内存位置。

这篇 wiki 文章有一个很棒的图表。

http://en.wikipedia.org/wiki/Object_copy