编程语言
首页 > 编程语言> > Python:浅层和深层复制构造函数的实现

Python:浅层和深层复制构造函数的实现

作者:互联网

在大多数情况下,在C中实现复制构造函数(或重载赋值运算符)很容易,因为有一个指针的概念.但是,我对如何在Python中实现浅层和深层复制感到困惑.

我知道其中一个库中有特殊命令,但它们不适用于您自己编写的类.那么实施的常用方法有哪些?

附:在一些基本数据结构(链表或树)上显示进程将不胜感激.

编辑:谢谢,他们工作,这是我在语法上的错误.
我对使用__copy __()和__deep_copy()__覆盖这些函数非常感兴趣.例如.如何在不知道数据结构中包含哪种类型的信息的情况下进行深层复制?

解决方法:

python copy module可以重用pickle module接口,让类自定义复制行为.

自定义类实例的默认设置是创建一个新的空类,交换__class__属性,然后对于浅拷贝,只需使用原始值更新副本上的__dict__.深拷贝会在__dict__上进行递归.

否则,指定__getstate __()方法以返回内部状态.这可以是您的类__setstate __()可以再次接受的任何结构.

您还可以指定__copy __()和/或__deepcopy __()方法来控制复制行为.期望这些方法自己完成所有复制,__ depepcopy __()方法传递一个memo映射以传递给递归的deepcopy()调用.

一个例子可能是:

from copy import deepcopy

class Foo(object):
    def __init__(self, bar):
        self.bar = bar
        self.spam = expression + that * generates - ham   # calculated

    def __copy__(self):
        # self.spam is to be ignored, it is calculated anew for the copy
        # create a new copy of ourselves *reusing* self.bar
        return type(self)(self.bar)

    def __deepcopy__(self, memo):
        # self.spam is to be ignored, it is calculated anew for the copy
        # create a new copy of ourselves with a deep copy of self.bar
        # pass on the memo mapping to recursive calls to copy.deepcopy
        return type(self)(deepcopy(self.bar, memo))

此示例定义自定义复制挂钩以防止self.spam被复制,因为新实例将重新计算它.

标签:python,deep-copy,copy-constructor
来源: https://codeday.me/bug/20190929/1830694.html