问题标签 [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.
java - Java 返回副本以隐藏未来的更改
在 Java 中,假设您有一个包装ArrayList
对象(或任何集合)的类。
您将如何返回这些对象之一,以使调用者不会看到将来对 ArrayList 中的对象所做的任何更改?
即,您想返回对象的深层副本,但您不知道它是否可克隆。
language-agnostic - 深拷贝和浅拷贝有什么区别?
深拷贝和浅拷贝有什么区别?
c# - 如何执行未标记为可序列化的对象的深层副本(在 C# 中)?
我正在尝试在 C# 中创建剪贴板堆栈。剪贴板数据存储在System.Windows.Forms.DataObject
对象中。我想将每个剪贴板条目 ( IDataObject
) 直接存储在通用列表中。由于位图(似乎)的存储方式,我认为我需要先执行深层复制,然后再将其添加到列表中。
我尝试使用二进制序列化(见下文)来创建深层副本,但由于System.Windows.Forms.DataObject
未标记为可序列化,因此序列化步骤失败。有任何想法吗?
java - 如何深度复制不规则的二维数组
如何在 Java 中深度复制形状不规则的二维数组?
IE。
Arrays.arrayCopy()
由于某种原因我无法使用(版本控制?)
c# - 对数组执行浅拷贝以调整其大小有什么影响?
如果我对深浅复制的理解是正确的,那么我的问题是不可能的。如果你有一个数组(a[10])并执行一个浅拷贝(b[20]),这不是不可能的,因为 b 中的数据不是连续的吗?
如果我完全错了,有人可以建议一种快速的方法来模仿(在 c# 中)c++ 执行 realloc 以调整数组大小的能力。
注意
我正在查看 System.Array 对象的 .Clone() 和 .Copy() 成员。
c++ - 关于手动内存管理和深度复制的新手问题
好的,所以我是第一次尝试 C++,因为看起来我将不得不在即将到来的大学课程中使用它。我有几年的编程经验,但在非垃圾收集领域并不多。
我有一个类,一个用于双向链表的节点。所以基本上它有一个值和两个指向其他节点的指针。主构造函数看起来像Node(const std::string & val, Node * prev, Node * next)
. 该练习包括一个复制构造函数,该构造函数对另一个节点进行浅拷贝,并在其上方添加一条注释,说明将其更改为深拷贝。
这就是我认为的意思:
这似乎实现了使更改复制的节点不会影响新节点的目标。但是,当我这样做时,我在堆上分配新的东西。这让我很担心,因为我认为这意味着我也应该在节点的析构函数中删除它。但这现在与另一个构造函数不一致,其中指向节点的指针刚刚传入,已经指向某些东西。我不能在这种情况下正确地进入析delete
构函数,对吗?next
prev
我真的很困惑,感谢指导!
编辑:这是代码(在我上面的更改之前),根据要求:
objective-c - 深拷贝一个 NSArray
是否有任何内置函数可以让我深拷贝一个NSMutableArray
?
我环顾四周,有人说[aMutableArray copyWithZone:nil]
作为深拷贝工作。但我试过了,它似乎是一个浅拷贝。
现在我正在使用for
循环手动进行复制:
但我想要一个更干净、更简洁的解决方案。
java - 如何克隆 ArrayList 并克隆其内容?
如何ArrayList
在 Java 中克隆并克隆其项目?
例如我有:
而且我希望其中的对象clonedList
与狗列表中的对象不同。
c# - 深拷贝 System.Windows.Forms.WebBrowser 对象/恢复状态
本质上,我想要做的是复制一个 WebBrowser 对象,这样我就可以执行相当于“在新选项卡中打开”或“在新窗口中打开”操作,维护任何已发布的数据。我不只是想导航到与原始 WebBrowser 对象相同的 URL,而是想重复 HttpWebRequest。这可能吗?如何?
c# - 缓存对象的高效克隆
我们有一个应用程序对数据对象执行比较以确定对象的一个版本是否不同于另一个版本。我们的应用程序还对这些对象进行了一些广泛的缓存,在进行这些比较时我们遇到了一些性能问题。
这是工作流程:
- 数据项 1 是内存中的当前项。该项目最初是从缓存中检索并深度克隆的(所有子对象,例如字典等)。然后编辑数据项 1,并修改其属性。
- 然后,我们将此对象与存储在缓存中的原始版本进行比较。由于数据项 1 已被克隆并且其属性已更改,因此这些对象应该是不同的。
这里有几个问题。
主要问题是我们的深度克隆方法非常昂贵。我们针对浅克隆对其进行了分析,它的速度慢了 10 倍。那是废话。这是我们深度克隆的方法:
我们最初使用以下内容进行克隆:
这是更高的性能,但是因为它做了一个浅层克隆,所以作为该对象属性的所有复杂对象,例如字典等,都没有被克隆。该对象仍将包含与缓存中的对象相同的引用,因此在比较时属性将相同。
那么,有没有人有一种有效的方法对 C# 对象进行深度克隆,包括克隆整个对象图?