Python:类层次结构中的自定义deepcopy

Python:类层次结构中的自定义deepcopy,python,python-3.x,Python,Python 3.x,我有一个表示线性代数表达式的类层次结构(作为表达式树),类似这样的东西(实际上比那个更复杂,但这应该足以让您了解情况) 表情 接线员 时代 加上 象征 母体 标量 我用许多不同的方式操纵这些表达式,所以我必须大量复制这些表达式,因为我想探索操纵它们的不同方式(我真的看不到复制它们的任何方法)。毫不奇怪,copy.deepcopy()速度很慢 并不是所有的类属性都需要被深度复制,而那些表达式树将始终是树(如果不是的话,那就是根本错误),所以我可能可以通过简化备忘录(或者根本不使用它

我有一个表示线性代数表达式的类层次结构(作为表达式树),类似这样的东西(实际上比那个更复杂,但这应该足以让您了解情况)

  • 表情
    • 接线员
      • 时代
      • 加上
    • 象征
      • 母体
      • 标量
我用许多不同的方式操纵这些表达式,所以我必须大量复制这些表达式,因为我想探索操纵它们的不同方式(我真的看不到复制它们的任何方法)。毫不奇怪,
copy.deepcopy()
速度很慢

并不是所有的类属性都需要被深度复制,而那些表达式树将始终是树(如果不是的话,那就是根本错误),所以我可能可以通过简化备忘录(或者根本不使用它)来节省一些时间

我想通过实现自定义复制功能来加快复制速度。这可能意味着实现
\uuu deepcopy\uuuu()
,编写一个全新的函数,或者使用类似
获取状态
设置状态
的东西,我真的不在乎。现在,我不在乎腌制

我正在使用Python 3

因为我有这样一个类层次结构,其中在不同级别引入了新属性,所以我不希望在每个级别上从头开始。相反,希望重用超类的某些功能,类似于在
\uuuuu init\uuuuu
中通常调用超类的
\uuuuuu init\uuuu
的方式。但是,我不想调用
\uuuu init\uuuu
,因为这有时会产生一些复制时不需要的额外内容


我如何以最快、最具蟒蛇式的方式做到这一点?在这种情况下,我找不到任何关于如何实现此复制功能的合理指导原则。我研究了Python 2和Python 3中的deepcopy实现。在Python 2中,使用了一系列不同的方法(
get\u state
/
set\u state
,使用
\u dict\u
,…),在Python 3中,我根本找不到相应的函数。

我自己找到了一个可能的解决方案:

class Expression(object):
    ...
    def __deepcopy__(self, memo):
        cpy = object.__new__(type(self))
        # manually copy all attributes of Expression here
        return cpy

class Operator(Expression):
    ...
    def __deepcopy__(self, memo):
        cpy = Expression.__deepcopy__(self, memo)
        # manually copy all attributes exclusive to Operator here
        return cpy
新对象始终在
表达式的
中创建。通过使用
object.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

不幸的是,此解决方案并不比默认的deepcopy快多少。我想知道这是否是因为所有那些调用
\uuuu deepcopy\uuuu
一直到类层次结构的顶部。我将对此进行调查