在C中,我习惯于strcpy制作一个字符串的深层副本,但在C++中使用它还是"很好"strcpy还是有更好的替代方法,我应该使用它?
我试图对setParentPython中的一个对象(一个继承自不同类的类的实例 - 具体而言QtGui.QLabel)执行一些操作(),但是在运行时期间引发了上述错误.对象本身有一些具有实际内容的字段(在调试时验证),但由于某种原因我无法"使用"它.错误意味着什么,我该如何解决?对于一些其他信息,我会说在我尝试对它执行此操作之前,该对象是从静态方法返回的.
子类具有__init__()自己的功能:
def __init__(self, image, father):
super(AtomicFactory.Image, self).__init__(father)
self.raw_attributes = image.attributes
self.attributes = {}
father.addChild(self)
self.update()
Run Code Online (Sandbox Code Playgroud)
现在我写了一个类似的代码,一个简单的代码,widget.setParent(mw)当窗口移动时在行上有相同的错误.
#!/usr/bin/env python
import sys
import copy
from PyQt4 import QtCore, QtGui
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
main_widget=QtGui.QWidget()
widget = QtGui.QPushButton('Test')
widget.resize(640, 480)
widget.setParent(main_widget)
widget.move(0, 0)
widget2=QtGui.QPushButton('Test2')
widget2.i=0
widget2.resize(600, 200)
widget2.setParent(main_widget)
widget2.move(640, 0)
def onResize(event):
print event
mw=copy.deepcopy(main_widget)
widget.setParent(mw)
widget2.setParent(mw)
widget.move(0, 0)
widget2.move(640, 480)
main_widget_width=main_widget.width()
widget_width=widget.width()
width2=main_widget_width-widget_width
height2=widget2.height()
widget2.resize(width2, height2)
widget2.move(640, 0) …Run Code Online (Sandbox Code Playgroud) 我们有下一个javascript对象.现在我想克隆它,但没有一些字段.例如,我想要没有字段"lastName"和输入的克隆对象"cars.age"
{
"firstName":"Fred",
"lastName":"McDonald",
"cars":[
{
"type":"mersedes",
"age":5
},
{
"model":"bmw",
"age":10
}
]
}
Run Code Online (Sandbox Code Playgroud)
输出(克隆)
{
"firstName":"Fred",
"cars":[
{
"model":"mersedes"
},
{
"model":"bmw"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我可以做点什么
var human = myJson
var clone = $.extend(true, {}, human)
delete clone.lastName
_.each(clone.cars, function(car))
{
delete car.age
}
Run Code Online (Sandbox Code Playgroud)
你知道更容易解决方案吗?
在大多数情况下,在C++中很容易实现复制构造函数(或重载赋值运算符),因为有一个指针的概念.但是,我对如何在Python中实现浅层和深层复制感到困惑.
我知道其中一个库中有特殊命令,但它们不适用于您自己编写的类.那么实施的常用方法有哪些?
PS将显示一些基本数据结构(链表或树)上的显示过程.
编辑:谢谢,他们工作,这是我在语法上的错误.我很感兴趣用__copy__()和覆盖这些函数__deep_copy()__.例如.如何在不知道数据结构中包含哪种类型的信息的情况下进行深层复制?
在Go中,什么是深度复制切片的简洁/良好表现方式?我需要将切片复制到新的后备阵列,因为另一个阵列由其他内容拥有,并且可能在复制后进行修改.
我现在这样做:
copy := append([]T{}, orig...)
Run Code Online (Sandbox Code Playgroud)
T元素类型在哪里orig.
我有一个对象,它有自己的内容(即某物的列表)和对另一个对象的引用,它与其链接。如何排除对另一个对象的引用进行深度复制?
from copy import deepcopy
class Foo:
def __init__(self, content, linked_to):
self.content = content
self.linked_to = linked_to
a1 = Foo([[1,2],[3,4]], None)
a2 = Foo([[5,6],[7,8]], a1)
a3 = deepcopy(a2) # <- I don't want there, that a3.linked_to will be copied
# I want that a3.linked_to will still point to a1
a3.linked_to.content.append([9,10])
print a1.content # [[1,2],[3,4]], but I want [[1,2],[3,4], [9,10]]
Run Code Online (Sandbox Code Playgroud) 我有两个相同类型的对象,需要将属性值从一个对象复制到另一个对象.有两种选择:
使用反射,浏览第一个对象的属性并复制值.
序列化第一个对象并反序列化副本.
两者都符合我的要求,问题是我在速度(成本)方面更好地使用哪些?
例
class Person
{
public int ID { get; set; }
public string Firsthand { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public decimal Weight { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
需要的属性值从复制Person p1到Person p2.
对于这个简单的样本 - 哪种方法更快?
更新
对于序列化,我使用此处建议的ObjectCopier:深度克隆对象
对于反射,我使用此代码:
foreach (PropertyInfo sourcePropertyInfo in copyFromObject.GetType().GetProperties())
{
PropertyInfo destPropertyInfo = copyToObject.GetType().GetProperty(sourcePropertyInfo.Name);
destPropertyInfo.SetValue(
copyToObject,
sourcePropertyInfo.GetValue(copyFromObject, null),
null);
}
Run Code Online (Sandbox Code Playgroud) 我到处搜索并发现类似的问题,答案并没有真正解决我的问题,所以我道歉,如果这似乎是重复,但从我的实验中看来,jQuery的深拷贝功能实际上并没有像它描述的那样工作(或也许我误读了它的描述).
这是一个展示我遇到的问题的例子:http: //jsfiddle.net/wcYsH/
或者这个下载:https: //github.com/kevroy314/jQuery-Extend-Test
为什么在操作深层副本时,前一个副本中的数据会发生变化?
我希望做一个深刻的(在这一点上,浅薄可能就足够了)一个受祝福的物体的副本.
Foo类
package Foo;
our $FOO = new Foo; # initial run
sub new {
my $class = shift;
my $self = {};
bless $self, $class;
return $self;
}
Run Code Online (Sandbox Code Playgroud)
主要计划
use Foo;
my $copy = $Foo::FOO; # instead of creating a ref, want to deep copy here
$copy->{bar} = 'bar';
Run Code Online (Sandbox Code Playgroud)
bar出现在两者$Foo::FOO和$copy.我意识到我可以通过设置为对象来创建对象的副本$copy = { %{$Foo::FOO} },但随后它将不再受到祝福; 另外,这只适用于简单的数据结构(现在不是问题).是这种方式复制然后保佑(例如$copy = bless { %{$Foo::FOO} }, q{Foo};)的唯一方法吗?
我试图避免使用Moose,Clone或其他非核心模块/软件包,因此在回复时请记住这一点. 粗体所以它更突出:)
正当我以为我已经理解了Python列表如何工作......
>>> a = [1,2,3]
>>> b = a[:]
>>> b
[1,2,3]
>>> b[1]=100
>>> b
[1,100,3]
>>> a
[1,2,3]
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.我正在使用a的内容初始化b,以便b指向不同的对象.因此,b的变化不会影响a.
现在看看另一个例子:
>>> a = [[1,2,3],[4,5,6],[7,8,9]]
>>> b = a[:][:]
>>> b
[[1,2,3],[4,5,6],[7,8,9]]
>>> b[1][1] = 100
>>> b
[[1,2,3],[4,100,6],[7,8,9]]
>>> a
[[1,2,3],[4,100,6],[7,8,9]]
Run Code Online (Sandbox Code Playgroud)
为什么这次b的变化会受到影响?与前面的例子有什么不同?