好吧,我理解像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