Joost, there may be a misunderstanding of terminology.
.NET, Java, and (presumably) Python are first compiled into byte-code, that is true.
However, the byte-code generated for a Python program is then interpreted. That means every byte-code instruction is re-evaluated whenever it is executed.
The byte-code generated for .NET and Java, on the other hand, is compiled to machine language, by a so-called “just-in-time compiler”. That means, during the first run through a loop Java will be as slow as Python, but during all subsequent runs it will be much faster since machine code is being executed.
(C# and Java use the same JIT compilation, by the way; one shouldn’t be listed as “compiled” and the other as “byte code”.)
What’s really surprising is how poorly Python fares even with the Psyco JIT compiler. I guess one guy can’t be reasonably expected to do as well as the research labs at Sun and Microsoft! However, my own benchmarks absolutely confirm the posted benchmarks: Python really is 100x slower than C#, and Psyco is still ~10x slower.
That’s for algorithms that are actually written in Python, of course… many so-called “Python programs” are really just stubs of Python scripts that call C DLLs for all performance-critical code.