我有一个表示线性代数表达式(作为表达式树)的类层次结构,类似这样的东西(实际上比那个更复杂,但这应该足以让您有一个想法)。你知道吗
我用许多不同的方式操纵这些表达式,所以我不得不大量复制这些表达式,因为我想探索操纵它们的不同方式(我真的看不到复制它们的任何方法)。毫不奇怪,copy.deepcopy()
很慢。你知道吗
并不是所有的类属性都需要深度复制,而且那些表达式树将始终是树(如果不是,则有些根本上是错误的),因此我可以通过简化记忆来节省一些时间(或者根本不使用它)。你知道吗
我想通过实现一个自定义的复制函数来加快复制速度。这可能意味着实现__deepcopy__()
,编写一个全新的函数,或者使用get_state
和set_state
之类的东西,我真的不在乎。现在,我不在乎腌制。你知道吗
我用的是python3。你知道吗
因为我有这样一个类层次结构,在不同的层次上引入了新的属性,所以我不希望在每个层次上都从头开始。相反,应该重用超类的一些功能,类似于在__init__
中调用超类的__init__
。但是,我不想调用__init__
,因为有时它会做一些复制时不需要的额外工作。你知道吗
我该如何以最快最快的方式来做呢?在这种情况下,我找不到任何关于如何实现此复制功能的合理指导原则。我研究了python2和python3中deepcopy的实现。在Python2中,使用了一系列不同的方法(get_state
/set_state
,使用__dict__
,…),在Python3中,我根本找不到相应的函数。你知道吗
我自己找到了一个可能的解决办法:
新对象总是在
Expression
的__deepcopy__
中创建的。通过使用object.__new__(type(self))
,新对象具有最初调用__deepcopy__
的对象的类型(例如Operator
)。你知道吗不幸的是,这个解决方案并不比默认的deepcopy快多少。我想知道这是不是因为所有这些调用
__deepcopy__
一直到类层次结构的顶部。我会调查的。你知道吗相关问题 更多 >
编程相关推荐