问题标签 [deep-copy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1037 浏览

java - Java 返回副本以隐藏未来的更改

在 Java 中,假设您有一个包装ArrayList对象(或任何集合)的类。

您将如何返回这些对象之一,以使调用者不会看到将来对 ArrayList 中的对象所做的任何更改?

即,您想返回对象的深层副本,但您不知道它是否可克隆。

0 投票
31 回答
728275 浏览

language-agnostic - 深拷贝和浅拷贝有什么区别?

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

0 投票
3 回答
3542 浏览

c# - 如何执行未标记为可序列化的对象的深层副本(在 C# 中)?

我正在尝试在 C# 中创建剪贴板堆栈。剪贴板数据存储在System.Windows.Forms.DataObject对象中。我想将每个剪贴板条目 ( IDataObject) 直接存储在通用列表中。由于位图(似乎)的存储方式,我认为我需要先执行深层复制,然后再将其添加到列表中。

我尝试使用二进制序列化(见下文)来创建深层副本,但由于System.Windows.Forms.DataObject未标记为可序列化,因此序列化步骤失败。有任何想法吗?

0 投票
7 回答
11555 浏览

java - 如何深度复制不规则的二维数组

如何在 Java 中深度复制形状不规则的二维数组?

IE。

Arrays.arrayCopy()由于某种原因我无法使用(版本控制?)

0 投票
1 回答
562 浏览

c# - 对数组执行浅拷贝以调整其大小有什么影响?

如果我对深浅复制的理解是正确的,那么我的问题是不可能的。如果你有一个数组(a[10])并执行一个浅拷贝(b[20]),这不是不可能的,因为 b 中的数据不是连续的吗?

如果我完全错了,有人可以建议一种快速的方法来模仿(在 c# 中)c++ 执行 realloc 以调整数组大小的能力。

注意
我正在查看 System.Array 对象的 .Clone() 和 .Copy() 成员。

0 投票
5 回答
419 浏览

c++ - 关于手动内存管理和深度复制的新手问题

好的,所以我是第一次尝试 C++,因为看起来我将不得不在即将到来的大学课程中使用它。我有几年的编程经验,但在非垃圾收集领域并不多。

我有一个类,一个用于双向链表的节点。所以基本上它有一个值和两个指向其他节点的指针。主构造函数看起来像Node(const std::string & val, Node * prev, Node * next). 该练习包括一个复制构造函数,该构造函数对另一个节点进行浅拷贝,并在其上方添加一条注释,说明将其更改为深拷贝。

这就是我认为的意思:

这似乎实现了使更改复制的节点不会影响新节点的目标。但是,当我这样做时,我在堆上分配新的东西。这让我很担心,因为我认为这意味着我也应该在节点的析构函数中删除它。但这现在与另一个构造函数不一致,其中指向节点的指针刚刚传入,已经指向某些东西。我不能在这种情况下正确地进入析delete构函数,对吗?nextprev

我真的很困惑,感谢指导!

编辑:这是代码(在我上面的更改之前),根据要求:

0 投票
6 回答
82193 浏览

objective-c - 深拷贝一个 NSArray

是否有任何内置函数可以让我深拷贝一个NSMutableArray?

我环顾四周,有人说[aMutableArray copyWithZone:nil]作为深拷贝工作。但我试过了,它似乎是一个浅拷贝。

现在我正在使用for循环手动进行复制:

但我想要一个更干净、更简洁的解决方案。

0 投票
21 回答
464739 浏览

java - 如何克隆 ArrayList 并克隆其内容?

如何ArrayList在 Java 中克隆并克隆其项目?

例如我有:

而且我希望其中的对象clonedList与狗列表中的对象不同。

0 投票
1 回答
1618 浏览

c# - 深拷贝 System.Windows.Forms.WebBrowser 对象/恢复状态

本质上,我想要做的是复制一个 WebBrowser 对象,这样我就可以执行相当于“在新选项卡中打开”或“在新窗口中打开”操作,维护任何已发布的数据。我不只是想导航到与原始 WebBrowser 对象相同的 URL,而是想重复 HttpWebRequest。这可能吗?如何?

0 投票
4 回答
3458 浏览

c# - 缓存对象的高效克隆

我们有一个应用程序对数据对象执行比较以确定对象的一个​​版本是否不同于另一个版本。我们的应用程序还对这些对象进行了一些广泛的缓存,在进行这些比较时我们遇到了一些性能问题。

这是工作流程:

  1. 数据项 1 是内存中的当前项。该项目最初是从缓存中检索并深度克隆的(所有子对象,例如字典等)。然后编辑数据项 1,并修改其属性。
  2. 然后,我们将此对象与存储在缓存中的原始版本进行比较。由于数据项 1 已被克隆并且其属性已更改,因此这些对象应该是不同的。

这里有几个问题。

主要问题是我们的深度克隆方法非常昂贵。我们针对浅克隆对其进行了分析,它的速度慢了 10 倍。那是废话。这是我们深度克隆的方法:

我们最初使用以下内容进行克隆:

这是更高的性能,但是因为它做了一个浅层克隆,所以作为该对象属性的所有复杂对象,例如字典等,都没有被克隆。该对象仍将包含与缓存中的对象相同的引用,因此在比较时属性将相同。

那么,有没有人有一种有效的方法对 C# 对象进行深度克隆,包括克隆整个对象图?