CPython and PyPy can interpret the Python language specification differently due to deliberate flexibility in the specification. The specification allows for variations in implementation techniques, such as object destructors, which can affect how programs run.
The specification also leaves certain aspects of execution undefined, such as timing and memory storage, due to their semi-inevitable nature. Undefined behavior, which allows language implementations to do anything beyond specified boundaries, is used in some cases for efficient program execution. However, it can cause issues such as compiler authors exploiting it to make their compilers faster.
Additionally, some aspects of language specifications are not specified because they were not considered, such as memory models and multi-threaded programming before the advent of multicore processors.















