执行真正的 "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" 可以通过指针引用而不创建副本(例如,如果它们是不可变的),因此复制它们可能是一种浪费。您可能希望在复制过程中明确免除这些
假设您有一个对象,其指针 a 指向对象 1。
我知道如果对象 1 不是指针,您可以克隆对象 1 说对象 2,并创建一个指向对象 2 的新指针 b。指针 b 就是放置在原始副本中的指针对象。
这就是深拷贝的工作原理。
如果对象 1 是指向另一个对象的指针怎么办?您是否为这两个对象制作了一份副本以进行深拷贝?或者只是 "first level" 对象?
从本质上讲,执行真正的深层复制时,您会深入到什么程度?我假设您尽可能深入并复制所有内容,但我想仔细检查一下。
谢谢。
原则上,真正的 "deep copy" 将复制所有内容 - 递归地对所有嵌套对象进行深度复制。
然而,这可能并不总是实用或可取的。这取决于您的具体情况:
如果您的数据结构包含循环或多次引用同一个对象,您将需要以某种方式跟踪和处理它,否则复制将继续进行到无穷大
某些对象可能 "safe" 可以通过指针引用而不创建副本(例如,如果它们是不可变的),因此复制它们可能是一种浪费。您可能希望在复制过程中明确免除这些