Две концепции могут помочь нам лучше понять, почему Python, скомпилированный с собственным машинным кодом, «может» работать не так быстро, как скомпилированный C или другие обычно скомпилированные языки. Их называют ранним связыванием и поздним связыванием.
Я должен начать с того, что я не эксперт по Python, и я попал на этот сайт случайно. Но мне нравится этот сайт.
Как уже упоминалось в другом ответе, компилятор C ++ может много знать о программе и принимать решения о том, какие операции использовать для конкретных структур данных. Например, если две целочисленные переменные необходимо сложить вместе, компилятор знает, что они являются родными целыми числами, например, 32-битной шириной, и он может добавить их вместе с помощью одной инструкции "ADD". Таким образом, он компилирует инструкцию ADD в код. Он заблокирован и не может быть изменен во время работы программы. Это раннее связывание.
С другой стороны, в таком языке, как Python, можно ожидать, что программа сложным образом объединит разные типы данных. Теперь компилятор не знает, являются ли наши 2 переменные целыми числами, числами с плавающей запятой, строками или списками. Поэтому он должен скомпилировать код, который определяет эту информацию во время выполнения и выбрать правильную операцию во время работы программы. Это поздняя привязка, и мы можем понять, что производительность этой дополнительной работы во время работы программы будет снижена. Это цена, которую вы платите за то, что эти опции открыты на таком языке, как Python, но это обеспечивает максимальную гибкость во время выполнения.