For example, using CPython, if you try to make an array of a million ints, you won't get `int[1000000]` in your memory layout. Each int would actually be an object, which is huge and inefficient to reference (they are something like 24+ bytes each).
PyPy on the other hand, works as expected.
I think the more important point is that PyPy when written like C code, can actually get within 2x of the performance of C code. If it's any slower, python won't be a viable language in competitive programming at all.
(CPython is sometimes still used on other platforms like atcoder.jp, but only because they allow third party libraries like numba and numpy which can fill the same role pypy does)
PyPy shouldn't be the new default, but neither should be CPython.
We were using pypy because it was better for our use case at one point but then later on we retested cpython and found the picture had changed.
We believe this was due to significant improvements in the regex engine for cpython over the period, but could also be due to our code base changing.
The point being it is not a given that pypy is faster.