In several chapters of this book (particularly Chapter 5, “Metaclasses,” and Chapter 8, “Strings and Unicode”), you have learned about the differences that exist in the way that Python 2 and Python 3 handle some things.
In fact, Python 3 is a very substantial update to the Python programming language. Throughout its history, Python has stressed strong backward compatibility, eschewing changes that are likely to break large amounts of existing code. That does not mean that the language never deprecates anything, of course, but backward compatibility is a strong focus.
Python 3.0 is an exception to this. Like developers of any complex language or system, the developers of Python made certain decisions that they later viewed as mistakes. Therefore, Python 3.0 can properly be seen as an endeavor to fix mistakes at the expense of backward compatibility.
Because existing Python programs are so pervasive, both Python 2 and Python 3 have been supported for some time—to allow the ecosystem time to migrate from the old to the new. Python 2.6 was released roughly concurrently with Python 3.0, and Python 2.7 roughly a year and a half later (a full year after the release of Python 3.1).
Currently, Python 2.7 and even Python 2.6 are still in common use. Therefore, it is important to understand the differences between Python 2 and Python 3, and how to navigate both.
This chapter explores what distinguishes Python 2 and Python 3, and discusses strategies for ...