From my understanding the default Python interpreter (CPython) compiles source code into bytecode and then interprets the bytecode into machine code.
PyPy on the other hand makes use of JIT to optimize often interpreted bytecode into compiled machine code. How is this different then the JVM? The JVM is an interpreter + compiler. It compiles source code to bytecode and then optimizes the often interpreted bytecode into compiled machine code.
Is there any other difference?