我正在使用NetworkX处理大型图表。我想序列化/反序列化这些图,我可以使用cPickle有效地完成。但是,当我使用委托而不是继承时,我注意到了性能损失,例如:
class A:
def __init__(self, **kwargs):
self.graph = Digraph()
class A(DiGraph):
def __init__(self, **kwargs):
DiGraph.__init__(self, **kwargs)
稍后在某些时候,我使用cPickle.loads来检索图形并将其加载到内存中。我对加载时间进行了基准测试,并且委托样式图的加载速度比继承样式慢2倍。性能对我来说是一个问题,我想知道为什么会发生这种情况。
答案 0 :(得分:0)
委托意味着您拥有两倍的对象。
没有继承,序列化格式如下所示:
A {graph: [pointer +1]}
Digraph {name:'mygraph', nodes:..., edges:...}
继承,更像是:
A {name:'mygraph', nodes:..., edges:...}