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

标签 python copy clone

我知道我们在 copy 模块中同时拥有 copydeepcopy,但我想手动完成...

我首先对 __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 的新实例。

实现深拷贝要复杂得多——你基本上需要重新实现整个 copycopyreg模块。它们是用 Python 编写的——只需点击链接即可查看源代码。

关于python - 在 Python 中手动克隆/复制实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6414881/

相关文章:

python - 如何确定参数是对象还是内置?

jquery - jquery clone() 之后 addthis-button 丢失 click-eventhandler

clone - 如何区分链接克隆与 VirtualBox 中的完整克隆?

python - 如何卸载 WinPython?

c - C-使用read()和write()从一个文件复制到另一个文件,而不使用文件功能

python - 不和谐的python机器人离开命令不起作用

android - 将数据库从 Assets 复制到数据库文件夹

java - 在 SimpleDateFormat 上同步与克隆

python - 是否可以使用 F2PY 包装共享库中的函数?

python - 如何将占位符文本添加到 Django 管理字段