Python brought this on itself by having no respect for compatibility between versions.
There's really no such thing as the Python language, only "Python 2.2", "Python 2.4", "Python 3". If you want to run Python scripts, you need to have three or four different Python runtimes installed, and that's asking a lot of both the distros and of users who need to keep everything straight, and probably even hack the #! at the beginning of scripts so that they work correctly.
Why didn't the official bittorrent client run on Red Hat Linux (w/o downgrading your Python) for at least three years?
Why was NLTK stuck on Python 2.4 for years? I might use Python to use NLTK, but why do I have to choose an old Python to get it to work... And what if I want to use it w/ software that needs Python 2.6?
When you add features as useful as set() datatypes, if-else expressions, generators, and comprehensions, people are going to use them. Python 2.2 code nearly always runs without modification on Python 2.3+ (the only exception would be collisions between variable names and new keywords). But someone targeting Python 2.6 has a huge hassle when deploying to older versions. This means that Python is actually adding useful new functionality; that is, the incompatibility is a symptom of a good thing.
It depends on what you mean by running unchanged. Numpy and scipy also support 2.4 to 2.7 (and soon to 3.1) from the same codebase. But everytime a new version of python is out, we need to make some changes, albeit relatively minors. So it is not perfect either.
There's really no such thing as the Python language, only "Python 2.2", "Python 2.4", "Python 3". If you want to run Python scripts, you need to have three or four different Python runtimes installed, and that's asking a lot of both the distros and of users who need to keep everything straight, and probably even hack the #! at the beginning of scripts so that they work correctly.