我知道我们在 copy
模块中同时拥有 copy
和 deepcopy
,但我想手动完成...
我首先对 __dict__
对象进行了一些尝试,只是为了了解如何创建实例来设置与要复制的对象具有的相同属性,这是我第一次测试的结果:
class A(object):
def F(self):
print "Test!"
a = A()
x = type('A', (object, ), dict(A.__dict__))
x.F()
执行时出现如下错误:
TypeError: unbound method F() must be called with A instance as first argument (got nothing instead)
我如何在 Python 中实现方法/函数来克隆/复制(递归)对象?
最佳答案
要手动创建用户定义类 A
实例的浅拷贝,您可以这样做
a = A()
b = object.__new__(A)
b.__dict__ = a.__dict__.copy() # or dict(a.__dict__)
调用 object.__new__()
会在不调用 __init__()
的情况下创建一个新实例。
您的代码构造了一个新类型对象,而不是 A
的新实例。
实现深拷贝要复杂得多——你基本上需要重新实现整个 copy
和 copyreg
模块。它们是用 Python 编写的——只需点击链接即可查看源代码。
关于python - 在 Python 中手动克隆/复制实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6414881/