我知道我们在模块内部copy和deepcopy内部都有copy,但我想手动完成...
我开始玩__dict__对象只是为了看看如何创建实例,设置与要复制的对象相同的属性,这是我第一次测试的结果:
class A(object):
def F(self):
print "Test!"
a = A()
x = type('A', (object, ), dict(A.__dict__))
x.F()
Run Code Online (Sandbox Code Playgroud)
执行时,出现以下错误:
TypeError:非绑定方法必须使用A实例作为第一个参数调用F()(没有任何内容)
我怎样才能在Python中实现一个方法/函数来克隆/复制(递归)一个对象?
要手动创建用户定义类的实例的浅表副本A,您可以这样做
a = A()
b = object.__new__(A)
b.__dict__ = a.__dict__.copy() # or dict(a.__dict__)
Run Code Online (Sandbox Code Playgroud)
object.__new__()无需调用即可创建新实例的调用__init__().
您的代码构造一个新的类型对象而不是一个新的实例A.
实现深层复制更为复杂 - 您基本上需要重新实现整个copy和copyreg模块.它们是用Python编写的 - 只需按照链接查看源代码即可.