Heute möchte ich ein wenig die wesentlichen Unterschiede zwischen Python 2 und Python 3 aufschlüsseln und warum man als ein Neuling lieber Python 3 nimmt.
Zuerst jedoch wieder eine Anekdote: Ich hatte vor 2 Jahren vor Python zu lernen jedoch stand ich vor dem Problem ob es nützlich ist noch mit Python 2 anzufangen oder einfach direkt nur Python 3 zu lernen, nach stundenlanger Recherche in verschiedenen Internetforen kam ich zum Schluss Python 2, besser gesagt Python 2.7, links liegen zu lassen und am besten zu vergessen. Nach inzwischen 2 Jahren und mehr Erfahrung kann ich nun sagen dass das die bessere Entscheidung geworden ist.

Inzwischen ist Python 3 fast 8 Jahre alt und immer noch erfreut sich Python 2 großer Beliebheit, das ist dem Problem geschuldet das man mit Python 3 versuchte Altlasten aus früheren Python Versionen los zu werden. Dadurch hat man jedoch viele Bibliotheken umgekrempelt, Funktionen und Methoden geändert bis zum Punkt das die meisten Python 2 Scripte und Bibliotheken nicht einfach so portiert werden können. Zwar ist man inzwischen ein wenig zurück gerudert und hat auch ein super Tool, nämlich 2to3, um Python Code zu portieren. Jedoch sitzt bis heute der Schock noch so tief das man entschlossen hat Python 2.7 noch bis 2020 zu unterstützen. Ja, das ist kein Witz, eigentlich wurde bereits letztes Jahr geplannt den Support für Python 2.7 fallen zu lassen.

Wenn Python 2.7 noch weitere 4 Jahre unterstützt wird, warum sollte ich es nicht nutzen?
Wird sich vielleicht der eine oder andere fragen, die Frage zu beantworten ist relativ einfach. Python 2 ist noch weniger performant und hat viele Stellen die einfach in Python 3 runder laufen. Beispiel gefällig?

for n in range(1000000000)
    #do something

Könnte zwar so unter Python 2 wie auch 3 laufen, jedoch gibt es hier einen großen Unterschied. Python 2 würde hier zuerst eine Liste mit 1 Mio. Einträgen erstellen was nicht nur länger dauert sondern auch auf Dauer den Speicher vollmüllt. Python 3 hingegen liefert einen Generator zurück welcher die Liste dynamisch zurück gibt und sofort bereit ist ohne den Speicher voll zu müllen.
Zwar hat man sich auch da eine Alternative für Python 2 überlegt mit:

for n in xrange(1000000000)
    #do something

Man hat effektiv die range Funktion aus Python 3 genommen und in xrange umbenannt. Dennoch verarbeitet der Python 3 Interpreter dies effizienter und sorgt dafür, dass das genannte Beispiel unter Python 3 immer noch schneller läuft.
Das ist nur eines der kleineren Beispiele was verändert wurden und dazu führt das Python 3 effizienter arbeitet. Dazu kommt das neuere Bibliotheken nun fast ausnahmslos alle Python 3 unterstützen oder ‘nur’ noch unterstützen in ihrer aktuellsten Version.
Einige Linux Distros entfernen nun Python auch komplett aus der Standard Installation, andere haben das bereits vor Jahren gemacht. Man bereitet sich überall auf das Support-Ende 2020 vor, Python 2 wird dann hoffentlich keine Aufschiebung mehr bekommen.

Eine ausführliche Liste zum Thema findet ihr übrigens hier: The key differences between Python 2.7.x and Python 3.x with examples