执行真正的 "deep copy" 时,您能走多深?

How deep do you go when performing a true "deep copy"?

假设您有一个对象,其指针 a 指向对象 1。

我知道如果对象 1 不是指针,您可以克隆对象 1 说对象 2,并创建一个指向对象 2 的新指针 b。指针 b 就是放置在原始副本中的指针对象。

这就是深拷贝的工作原理。

如果对象 1 是指向另一个对象的指针怎么办?您是否为这两个对象制作了一份副本以进行深拷贝?或者只是 "first level" 对象?

从本质上讲,执行真正的深层复制时,您会深入到什么程度?我假设您尽可能深入并复制所有内容,但我想仔细检查一下。

谢谢。

原则上,真正的 "deep copy" 将复制所有内容 - 递归地对所有嵌套对象进行深度复制。

然而,这可能并不总是实用或可取的。这取决于您的具体情况:

  • 如果您的数据结构包含循环或多次引用同一个对象,您将需要以某种方式跟踪和处理它,否则复制将继续进行到无穷大

  • 某些对象可能 "safe" 可以通过指针引用而不创建副本(例如,如果它们是不可变的),因此复制它们可能是一种浪费。您可能希望在复制过程中明确免除这些