问题标签 [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 投票
2 回答
28059 浏览

python - Python字典深拷贝

我想知道 deepcopy 在以下情况下究竟是如何工作的:

它是否返回对我在字典中的列表的引用?或者它是否按我的预期工作并将每个列表复制到具有不同参考的新列表中?

我知道什么是深拷贝(因此无需解释深拷贝和浅拷贝之间的区别),但我想知道它是否像我期望的那样工作,因此在我使用addExample().

0 投票
1 回答
1200 浏览

.net - 具有依赖关系的 LINQ to SQL 深拷贝对象

我正在尝试创建一个 LINQ to SQL 对象列表,我将其添加到数据上下文中并稍后插入。当我调用 SubmitChanges() 时,虽然我收到一条错误消息,指出 WeatherForecast 对象的 Postcode 外键为空。

我似乎在调用 List.Add() 时不会对依赖对象进行深层复制。有没有办法让它做一个深拷贝?

这是我正在尝试做的一个例子。

0 投票
2 回答
8942 浏览

php - PHP 引用数组的深拷贝

所以 $array 是一个所有元素都是引用的数组。

我想将此数组附加到另​​一个名为 $results 的数组(在循环中),但由于它们是引用,PHP 复制引用并且 $results 充满了相同的元素。

到目前为止,最好的工作解决方案是:

我担心这会非常低效。有一个更好的方法吗?

0 投票
25 回答
462338 浏览

c# - 如何将一系列数组元素克隆到新数组?

我有一个包含 10 个元素的数组 X。我想创建一个新数组,其中包含 X 中从索引 3 开始并以索引 7 结束的所有元素。当然,我可以轻松编写一个循环来为我做这件事,但我想让我的代码尽可能干净. C# 中有没有可以为我做的方法?

类似的东西(伪代码):

Array.Copy不符合我的需要。我需要将新数组中的项目克隆。Array.copy只是 C 样式memcpy的等效项,这不是我要找的。

0 投票
3 回答
4850 浏览

c++ - c++ 重载运算符、赋值、深拷贝和加法

我正在重新阅读我的一些旧大学教科书时正在对运算符重载进行一些探索,我认为我误解了一些东西,所以希望这对一些回答者来说是一个不错的轻松声誉。如果这是重复的,请指出我正确的方向。

我创建了一个简单的计数器类,它(在这个阶段)有一个成员,val(一个 int)。

我已经初始化了其中三个计数器,varOne 到 varThree,并希望第三个计数器是前两个的总和(例如,在下面的代码中 varThree.val 设置为 5)

我已经像这样重载了 operator+:

我已经把它变成了一个非成员函数,并且是 counter 类的一个朋友,这样它就可以访问私有值。

当添加另一个私有成员pVal(指向 int 的指针)时,我的问题就开始了。添加这意味着我不能再进行简单的varThree = varOne复制,因为当 varOne 被销毁时,varThree.pVal 仍将指向同一块内存。

我已经重载operator=如下。

现在,如果我做的事情就像varThree = varOne一切都正确复制,但是尝试这样做varThree = varOne + varTwo会给我以下错误:

看起来好像counter::operator=无法处理来自的返回输出operator+,并且我需要operator=进一步重载以接受operator+返回的类型,但是我没有运气,我开始认为也许我已经做了一些事情根本错误。

0 投票
5 回答
14259 浏览

python - copy.deepcopy 与 pickle

我有一个小部件的树形结构,例如集合包含模型,模型包含小部件。我想复制整个集合,copy.deepcopy与“腌制和去腌制”对象相比速度更快,但是用 C 编写的 cPickle 更快,所以

  1. 为什么我(我们)不应该总是使用 cPickle 而不是 deepcopy?
  2. 有没有其他的副本替代品?因为 pickle 比 deepcopy 慢,但 cPickle 更快,所以 deepcopy 的 C 实现可能会是赢家

示例测试代码:

时间:

0 投票
7 回答
34801 浏览

c - C 编程。如何深度复制结构?

我有以下两个结构,其中“子结构”有一个“使用结构”作为元素。

然后我创建了两个“child”类型的结构,我们称它们为 childA 和 childB

如何仅将 rusage 结构从 childA 复制到 childB?

我做了以下,但我猜它复制了内存位置,因为如果我改变了 childA 中的使用值,它也会改变 childB。

我知道这给了 childB 来自 childA 的所有值。我已经处理了 childB 中的其他字段,我只需要能够复制位于“child”结构中的名为 usage 的 rusage 结构。

0 投票
5 回答
17361 浏览

c++ - 复制构造函数:深度复制抽象类

假设我有以下(简化案例):

现在,我有什么办法可以在 Material 的复制构造函数中对抽象的 IColor 进行深度复制吗?也就是说,我希望复制任何 m._color 的值(颜色、纹理),而不仅仅是指向 IColor 的指针。

0 投票
4 回答
41917 浏览

perl - 在 Perl 中深度复制散列的最佳方法是什么?

可能重复:
在 Perl 中制作数据结构的深层副本的最佳方法是什么?

在我开始自己编写代码并重新发明轮子之前,如何在不复制 hashref 的情况下复制散列散列?

我正在通过Config::General读取散列的散列。即数据结构为:

然后我通过取消引用从配置中提取我的组,并在重写配置文件之前在运行时更改内容:

问题是我需要检查是否进行了更改并对系统的文件结构进行相关更改。我不能通过检查来做到这一点:

as$group{'item1'}$config{'group'}{'item1'}都是完全相同的 hashref。

现在虽然简单地重新解析配置文件并在保存到磁盘之前将磁盘中的解析副本与编辑版本进行比较应该是微不足道的,但我确信有一种方法可以对复杂数据结构进行嵌套取消引用,复制哈希引用的内容,而不是简单地复制引用本身。对 CPAN 的粗略检查并没有发现任何问题。我错过了什么?

基准

得到了我的答案:

结果是:

0 投票
7 回答
84762 浏览

java - 如何在 Java 中对二维数组进行深拷贝?

我只是.clone()在我的二维boolean数组上使用了一下,认为这是一个深拷贝。

如何执行boolean[][]阵列的深层复制?

我应该遍历它并做一系列的System.arraycopy's 吗?