问题标签 [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 类实现了Serializable
接口但没有公共clone()
方法,通常可以像这样创建深拷贝:
我经常遇到像这样的第三方库类,并诉诸上述黑客攻击。我什至ObjectOutputStream
有时会扩展以使副本更浅。除了效率低下(编码/解码速度慢并且临时序列化图会消耗大量内存)之外,它从未引起严重问题。)
如果使用这种技术不安全,那么类可能不应该被声明Serializable
。
所以我想知道的是,如果你的类是Serializable
,什么可能会阻止你定义一个公共clone()
方法(使用Cloneable
接口或复制构造函数?)
相关:在 Java 中复制对象
.net - 无需序列化的深度复制 .NET 类实例
我正在使用来自第三方 DLL 的实例类,我需要对特定实例进行深度复制。该类未标记为Serializable
,因此我无法使用此建议的方法BinaryFormatter
。
如何在不使用序列化的情况下获取该对象的深层副本?
java - 如何在 Java 中将数组列表从一个类复制到另一个类?
我知道,为了复制一个数组列表并拥有两个相互独立的列表,您必须使用深层复制(将对象从一个列表复制到另一个列表,而不仅仅是引用),但是有没有办法可以跨类完成?
例如; 我从 Class1 呼叫 Class2。在 Class2 中,对象根据事件添加到自定义对象的 ArrayList 中。我希望能够将此 ArrayList 转移到 Class1,但每当我尝试时,我都会得到一个 NullPointer。
有什么线索吗??
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,但恐怕我将不得不深入兔子洞才能弄清楚。有什么想法或想法吗?
谢谢!!
c# - NHibernate 的深拷贝实体
我目前正在工作中启动一个新的 ASP.NET MVC 项目,我们需要生成项目成本估算。
我们正在使用 NHibernate、ASP.NET MVC 1.0 和 StructureMap。
客户希望能够填写有关项目的所有信息,这些信息位于不同的页面中,我们需要在每次回发之间坚持。
客户端不希望在完成时选择以名称保存它,但我们希望即使他还没有保存它,也希望将它持久保存在数据库中。所以我们有了创建“草稿模式”的想法,这样用户将开始处理他的项目,将填满所有页面,并在“草稿模式”开启的情况下将其持久化在数据库中。
但是我们需要管理草稿,我的意思是,当用户开始编辑现有项目时,我们需要创建它的副本,将对象及其所有子对象设置为草稿模式,并在我们的数据库中创建它的副本. 我们将需要更改子项的所有引用。
所以,我试图找到深度复制对象并更改所有引用的最佳方法,我宁愿不必为我必须复制的每个实体创建一个复制类,如果这是更通用的东西可能的。
如果您需要更多详细信息或不清楚的地方,请告诉我。
谢谢,
查尔斯
python - Python:类属性的继承(列表)
从超类继承类属性,然后更改子类的值可以正常工作:
导致输出:
10
10
10
5
这很好:Archer 继承了 Unit 的值,但是当我更改 Archer 的值时,Unit 的值保持不变。
现在,如果继承的值是一个列表,浅拷贝效果就会出现,超类的值也会受到影响:
输出:
10
10
5
5
从超类继承列表时,有没有办法“深度复制”列表?
非常感谢
佐野
python - 在 Python 中复制嵌套列表
我想复制一个二维列表,这样如果我修改一个列表,另一个不会被修改。
对于一维列表,我只是这样做:
现在如果我修改b
,a
不会被修改。
但这不适用于二维列表:
如果我修改b
,a
也会被修改。
我该如何解决?
c# - 如何在不将其标记为可序列化的情况下深度复制一个类
给定以下课程:
B
另一个类可能继承/包含其他一些类在哪里。
鉴于这种情况:
A
是一个大类,包含许多引用类型- 我无法标记
B
为[Serializable]
我无权访问源代码B
以下执行深度复制的方法不起作用:
- 我不能使用
ICloneable
或MemberwiseClone
作为类A
包含许多引用类型 - 我无法为 编写复制构造函数
A
,因为该类很大并且不断被添加,并且包含B
无法深度复制的类(如 ) - 我无法使用序列化,因为我无法将包含的类(例如
B
,没有可用源代码的类)标记为[Serializable]
我怎样才能深拷贝课A
?
c# - 在 C# 中克隆对象
我用虚拟属性定义了下一个类:
并试图克隆该派生类的对象。如何在基类中实现深拷贝?
java - Java 中的克隆列表元素
我有一个类型的变量List<RelationHeader>
。现在我想将此列表中的所有元素复制到一个新列表中,但我想按值实际复制所有成员(克隆它们)。是否有一个快速命令来执行此操作,或者我是否需要遍历列表并一次复制一个?