Хорошо, в таких языках, как 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)
ЧтоЯ не понимаю, почему это должно быть намного медленнее, поиск метода (я бы подумал) происходил при вызове Reduce, поэтому не нужно искать внутреннюю часть структуры Reduce, где фактически вызывается метод пересечения.снова (просто повторное использование той же ссылки на метод).
Может ли кто-нибудь осветить, где мое понимание неверно?