cPickle,NetworkX:为什么继承比委托更快?

时间:2011-10-04 10:26:32

标签: python

我正在使用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倍。性能对我来说是一个问题,我想知道为什么会发生这种情况。

1 个答案:

答案 0 :(得分:0)

委托意味着您拥有两倍的对象。

没有继承,序列化格式如下所示:

A       {graph: [pointer +1]}
Digraph {name:'mygraph', nodes:..., edges:...}

继承,更像是:

A       {name:'mygraph', nodes:..., edges:...}