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
一直到类层次结构的顶部。我将对此进行调查