我想知道在以下背景下,深度复制是如何工作的:
from copy import deepcopy
def copyExample:
self.myDict = {}
firstPosition = "First"
firstPositionContent = ["first", "primero"]
secondPosition = "Second"
secondPositionContent = ["second"]
self.myDict[firstPosition] = firstPositionContent
self.myDict[secondPosition] = secondPositionContent
return deepcopy(self.myDict)
def addExample(self):
copy = self.copyExample()
copy["Second"].add("segundo")
Run Code Online (Sandbox Code Playgroud)
它是否返回对字典中列表的引用?或者它是否按预期工作并复制具有不同引用的新列表中的每个列表?
我知道什么是深层复制(所以没有必要解释深层和浅层之间的区别),但我想知道它是否像我期望的那样工作,因此在我使用时不会更改实例变量addExample().
问题:有没有办法使用现有的objective-c方法来完成NSDictionary或NSArray的完整深层副本,它们本身有嵌套的词典或数组?
那是我已经读过的问题可能是当它遇到嵌套的字典或数组时它只复制指向嵌套项的指针,而不是真正复制该项.
背景:作为一个例子,我正在尝试使用NSUserDefaults加载/保存以下配置,并且当加载需要将不可变副本转换为NSUserDefault之前进行更改之前的可变副本.
我只想知道如何复制NSMutableArray,这样当我更改数组时,我对它的引用不会改变.如何复制数组?
我在我的应用程序中处理Bitmaps,出于某些目的,我需要创建Bitmap的深层副本.有一种优雅的方式怎么做?
我试过了
Bitmap deepCopy = original.Clone();
Run Code Online (Sandbox Code Playgroud)
,显然这不会创建一个深层副本,而是浅层副本.我的下一个尝试是创建一个新的位图
Bitmap deepCopy = new Bitmap(original);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这个构造函数是Bitmap(Image),而不是Bitmap(Bitmap),而Bitmap(Image)会将我漂亮的8bppIndexed Pixelformat转换为另一个.
另一种尝试是使用MemoryStream
public static Bitmap CreateBitmapDeepCopy(Bitmap source)
{
Bitmap result;
using (MemoryStream stream = new MemoryStream())
{
source.Save(stream, ImageFormat.Bmp);
stream.Seek(0, SeekOrigin.Begin);
result = new Bitmap(stream);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
好吧,这也不起作用,因为必须在Bitmap的整个生命周期内打开MemoryStream.
所以,我总结了所有的后端,我真的很想看到一个很好的优雅方式来创建一个Bitmap深层副本.感谢那 :)
我想在Python中对函数进行深度复制.该副本模块是没有帮助的,根据文件,其中说:
此模块不复制类型,如模块,方法,堆栈跟踪,堆栈帧,文件,套接字,窗口,数组或任何类似类型.它通过返回原始对象来"复制"函数和类(浅和深); 这与pickle模块处理这些方式兼容.
我的目标是让两个函数具有相同的实现,但具有不同的文档字符串.
def A():
"""A"""
pass
B = make_a_deepcopy_of(A)
B.__doc__ = """B"""
Run Code Online (Sandbox Code Playgroud)
那么怎么做呢?
在Objective-C中,可以通过以下方式进行深度复制:
Foo *foo = [[Foo alloc] init];
Foo *foo2 = foo.copy;
Run Code Online (Sandbox Code Playgroud)
如何在Swift中进行深层复制?
我试图在javascript中深层复制嵌套对象的数组.我的阵列看起来像这样
var arr = [{name:"adam",age:"21"},
{name:"freddie",age:"35",children:[{name:"mercury",age:"25"}]},
{name:"jim",age:"35",children:[{name:"morrison",age:"25",children:[{name:"some", age:"40"}]}]}
];
Run Code Online (Sandbox Code Playgroud)
我想对数组中的每个对象进行深层复制,我希望将arr的精确副本创建为不应该有对象引用的新数组.数组的深度也是未知的,即子数组可以达到任何级别.我已经通过这个链接 将一个对象数组复制到另一个数组而没有javascript中的对象引用(深层复制),但这对我没有帮助.我用google搜索并在jQuery中找到了一些解决方案,但这对我没有帮助,因为我对jQuery没有任何了解.
我也尝试用递归实现它,但这也不起作用 http://ideone.com/kJi5X3
我想在不使用jQuery或任何东西的情况下在javascript中完成它.我是JavaScript的新手,所以如果有任何库或简单的方法,我可能会错过.请帮我解决这个问题.提前致谢.
如果bean中的所有对象都实现了Serializable接口,那么会BeanUtils.cloneBean()进行深层复制吗?
我最近正在考虑释放Java对象占用的内存.在这样做时,我对如何在Java中复制(浅/深)对象以及如何避免在对象仍处于使用状态时意外清除/无效而感到困惑.
考虑以下场景:
ArrayList<Object>作为参数传递给方法.ArrayList<Object>给可由线程处理的runnable类.ArrayList<Object>一个HashMap.现在在这种情况下,如果我打电话,list = null;或者list.clear();对象会发生什么?在这种情况下,对象会丢失,在哪种情况下只将引用设置为null?
我想这与浅层和深层复制对象有关,但在哪些情况下会发生浅层复制,在这种情况下,深层复制是否发生在Java中?
使用slice(0)和concat()在javascript中将对象数组复制到另一个数组中不起作用.
我已经尝试了以下测试,如果我使用这个获得深度复制的预期行为.但是,在复制的数组中进行更改后,原始数组也会被修改.
var tags = [];
for(var i=0; i<3; i++) {
tags.push({
sortOrder: i,
type: 'miss'
})
}
for(var tag in tags) {
if(tags[tag].sortOrder == 1) {
tags[tag].type = 'done'
}
}
console.dir(tags)
var copy = tags.slice(0)
console.dir(copy)
copy[0].type = 'test'
console.dir(tags)
var another = tags.concat()
another[0].type = 'miss'
console.dir(tags)
Run Code Online (Sandbox Code Playgroud)
如何将数组的深层副本复制到另一个数组中,以便在复制数组中进行更改时不会修改原始数组.
deep-copy ×10
arrays ×2
copy ×2
iphone ×2
java ×2
javascript ×2
python ×2
bitmap ×1
c# ×1
dictionary ×1
function ×1
javabeans ×1
node.js ×1
nsdictionary ×1
null ×1
shallow-copy ×1
swift ×1
xcode ×1