好吧,我理解像C++这样的语言,为什么在类中定义的调用虚拟方法比调用非虚拟方法要慢(您必须通过动态调度表来查找调用的正确实现)。为什么方法很慢?
但是在Python,如果我有:
list_of_sets = generate_a_list_containg_a_bunch_of_sets()
intersection_of_all = reduce(list_of_sets[0].intersection, list_of_sets)
这是大幅(在我的实验中约40%)慢于:
list_of_sets = generate_a_list_containg_a_bunch_of_sets()
intersection_of_all = reduce(set.intersection, list_of_sets)
我不明白的是为什么这应该是慢得多,方法查找(我认为)会发生在减少的调用,所以减少内部的交集方法实际调用时不应该再次查找(它只是重用相同的方法参考)。
有人能照亮这里我的理解是有缺陷?
你看见这个differenc e对于很多小套,还是对于一些大套?我希望绑定问题在第一种情况下很重要,但不在后者中(当实际的交叉工作主宰开销时)。我看到两个相互矛盾的答案(其中一个是两次),并且无法确定哪个答案是正确的。 – ugoren 2012-02-28 17:38:28
这是一个小的(约10套的清单)和中等(约100套随机产生的清单)。 Sven在他的回答中解释了这个原因。 – 2012-02-28 18:25:15