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

java - Java 对象何时可序列化但不可克隆?

如果 Java 类实现了Serializable接口但没有公共clone()方法,通常可以像这样创建深拷贝:

我经常遇到像这样的第三方库类,并诉诸上述黑客攻击。我什至ObjectOutputStream有时会扩展以使副本更浅。除了效率低下(编码/解码速度慢并且临时序列化图会消耗大量内存)之外,它从未引起严重问题。)

如果使用这种技术不安全,那么类可能不应该被声明Serializable

所以我想知道的是,如果你的类是Serializable,什么可能会阻止你定义一个公共clone()方法(使用Cloneable接口或复制构造函数?)


相关:在 Java 中复制对象

0 投票
3 回答
7935 浏览

.net - 无需序列化的深度复制 .NET 类实例

我正在使用来自第三方 DLL 的实例类,我需要对特定实例进行深度复制。该类未标记为Serializable,因此我无法使用此建议的方法BinaryFormatter

如何在不使用序列化的情况下获取该对象的深层副本?

0 投票
2 回答
4663 浏览

java - 如何在 Java 中将数组列表从一个类复制到另一个类?

我知道,为了复制一个数组列表并拥有两个相互独立的列表,您必须使用深层复制(将对象从一个列表复制到另一个列表,而不仅仅是引用),但是有没有办法可以跨类完成?

例如; 我从 Class1 呼叫 Class2。在 Class2 中,对象根据事件添加到自定义对象的 ArrayList 中。我希望能够将此 ArrayList 转移到 Class1,但每当我尝试时,我都会得到一个 NullPointer。

有什么线索吗??

0 投票
2 回答
699 浏览

ruby-on-rails - Rails, Attachment_fu - 数据库存储附件的深拷贝

我有一个模型,比如说附件,它使用 attachment_fu 来接受用户上传的文件。我想“深度复制”(或在 Ruby-ese 中,深度克隆)一个附件,从而在“db_files”表中创建一个全新的二进制对象。

我发现这还不是一个完全解决的问题。这篇博文:http: //www.williambharding.com/blog/rails/rails-faster-clonecopy-of-attachment_fu-images/

展示了一种据称适用于基于文件系统的存储的方法。对于基于数据库的存储,“深拷贝”失败。创建了一个新的“附件”,但它使用了预先存在的 db_file_id,因此执行了浅拷贝。

在 attachment_fu 的 db_file_backend.rb 中,我看到了保存方法:

所以,我试图破译这一点,我相信“build_db_file”是 DbFile.new 的一些 Ruby 元编程魔术速记,尽管我无法确认这一点(grepping 源显示没有提及这一点,我也无法在谷歌上找到它)。

我不太确定它在做什么,但我的理论是,作为“深拷贝”尝试的一部分(在链接代码中),正在从源 obj 复制 db_file,因此它只是触发保存而不是创造。

我最初的理论是父(附件)对象将在深拷贝尝试时设置为“新”,因此我做了类似的事情:

这实际上适用于克隆对象,但不幸的是,所有常规、非克隆文件上传的测试都失败了。附件对象已创建,但没有数据写入 db_file。理论上是先保存父对象,然后再写入db_file的东西,因此new_record?返回假。

所以,作为一个实验,我决定尝试:

这部分有效 - db_file 已填充,但随后我在 db_file.save 上收到错误!- 说 db_file 为零。

所以,我有点受阻。我可以做一些进一步的试验和错误,但在这一点上,我对这个插件如何工作的理解有限。我真的没想到也不想花这么多时间在上面,所以我不愿意进一步探索attachment_fu,但恐怕我将不得不深入兔子洞才能弄清楚。有什么想法或想法吗?

谢谢!!

0 投票
4 回答
3767 浏览

c# - NHibernate 的深拷贝实体

我目前正在工作中启动一个新的 ASP.NET MVC 项目,我们需要生成项目成本估算。

我们正在使用 NHibernate、ASP.NET MVC 1.0 和 StructureMap。

客户希望能够填写有关项目的所有信息,这些信息位于不同的页面中,我们需要在每次回发之间坚持。

客户端不希望在完成时选择以名称保存它,但我们希望即使他还没有保存它,也希望将它持久保存在数据库中。所以我们有了创建“草稿模式”的想法,这样用户将开始处理他的项目,将填满所有页面,并在“草稿模式”开启的情况下将其持久化在数据库中。

但是我们需要管理草稿,我的意思是,当用户开始编辑现有项目时,我们需要创建它的副本,将对象及其所有子对象设置为草稿模式,并在我们的数据库中创建它的副本. 我们将需要更改子项的所有引用。

所以,我试图找到深度复制对象并更改所有引用的最佳方法,我宁愿不必为我必须复制的每个实体创建一个复制类,如果这是更通用的东西可能的。

如果您需要更多详细信息或不清楚的地方,请告诉我。

谢谢,

查尔斯

0 投票
3 回答
18496 浏览

python - Python:类属性的继承(列表)

从超类继承类属性,然后更改子类的值可以正常工作:

导致输出:
10
10
10
5
这很好:Archer 继承了 Unit 的值,但是当我更改 Archer 的值时,Unit 的值保持不变。

现在,如果继承的值是一个列表,浅拷贝效果就会出现,超类的值也会受到影响:

输出:
10
10
5
5

从超类继承列表时,有没有办法“深度复制”列表?

非常感谢
佐野

0 投票
2 回答
38941 浏览

python - 在 Python 中复制嵌套列表

我想复制一个二维列表,这样如果我修改一个列表,另一个不会被修改。

对于一维列表,我只是这样做:

现在如果我修改b,a不会被修改。

但这不适用于二维列表:

如果我修改ba也会被修改。

我该如何解决?

0 投票
7 回答
24752 浏览

c# - 如何在不将其标记为可序列化的情况下深度复制一个类

给定以下课程:

B另一个类可能继承/包含其他一些类在哪里。


鉴于这种情况:

  1. A是一个大类,包含许多引用类型
  2. 我无法标记B[Serializable]我无权访问源代码B

以下执行深度复制的方法不起作用:

  1. 我不能使用ICloneableMemberwiseClone作为类A包含许多引用类型
  2. 我无法为 编写复制构造函数A,因为该类很大并且不断被添加,并且包含B无法深度复制的类(如 )
  3. 我无法使用序列化,因为我无法将包含的类(例如B,没有可用源代码的类)标记为[Serializable]

我怎样才能深拷贝课A

0 投票
2 回答
716 浏览

c# - 在 C# 中克隆对象

我用虚拟属性定义了下一个类:

并试图克隆该派生类的对象。如何在基类中实现深拷贝?

0 投票
1 回答
1049 浏览

java - Java 中的克隆列表元素

我有一个类型的变量List<RelationHeader>。现在我想将此列表中的所有元素复制到一个新列表中,但我想按值实际复制所有成员(克隆它们)。是否有一个快速命令来执行此操作,或者我是否需要遍历列表并一次复制一个?