¿Por qué el “funcionamiento” de los archivos .pyc no es más rápido en comparación con los archivos .py?

Sé la diferencia entre un archivo .py y un archivo .pyc. Mi pregunta no es sobre cómo , sino sobre por qué Según los documentos :

Un progtwig no se ejecuta más rápido cuando se lee desde un archivo .pyc o .pyo que cuando se lee desde un archivo .py; lo único que es más rápido con los archivos .pyc o .pyo es la velocidad con la que se cargan.

Los archivos .pyc cargan las importaciones más rápido. ¿Pero después de cargar la parte ‘en ejecución’ de los archivos .pyc toma el mismo tiempo que la parte ‘en ejecución’ en los archivos .py? ¿Por qué es esto? Esperaría que

  • el código de bits (.pyc) está más cerca de la máquina virtual de Python y, por lo tanto, se ejecuta más rápido
  • Los archivos .py se comstackn en .pyc antes de ejecutarse. Esto da un paso adicional y, por lo tanto, cuesta tiempo.

Mi pregunta: Después de la parte de importación, ¿por qué la parte en ejecución de los archivos .pyc no acelera la ejecución en comparación con los archivos .py?

Cuando ejecuta un archivo .py , primero se comstack a bytecode, luego se ejecuta. La carga de un archivo de este tipo es más lenta porque, para un .pyc , el paso de comstackción ya se realizó, pero después de cargar, se realiza la misma interpretación del código de bytes.

En pseudocódigo, el intérprete de Python ejecuta el siguiente algoritmo:

 code = load(path) if path.endswith(".py"): code = compile(code) run(code) 

La forma en que se ejecutan los progtwigs es siempre la misma. El código comstackdo es interpretado.

La forma en que se cargan los progtwigs difiere. Si hay un archivo pyc actual, esto se toma como la versión comstackda, por lo que no se debe seguir ningún paso de comstackción antes de ejecutar el comando. De lo contrario, se lee el archivo py , el comstackdor debe comstackrlo (lo que lleva un poco de tiempo), pero la versión comstackda en la memoria se interpreta de la misma manera.