在Python中手动克隆/复制实例

Osc*_*ros 2 python clone copy

我知道我们在模块内部copydeepcopy内部都有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中实现一个方法/函数来克隆/复制(递归)一个对象?

Sve*_*ach 9

要手动创建用户定义类的实例的浅表副本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.

实现深层复制更为复杂 - 您基本上需要重新实现整个copycopyreg模块.它们是用Python编写的 - 只需按照链接查看源代码即可.