2 a 3 se dost liší v syntaxi, největší rozdíly třeba tu:
http://www.cs.carleton.edu/faculty/jgoldfea/cs201/spring11/Python2vs3.pdf
Lidi casto upozornuji hlavne na rozdily v syntaxi. Ty by se jiste daly prekonat nejakym transpilerem a vsichni by byli happy.
Jenze v Pythonu 3 se zmenila i semantika nekterych funkci/vyrazu, takze napr. vraceji jine hodnoty nez ve dvojce, nebo vyhazuji jine vyjimky atd... Plus dalsi velka zmena je, ze Py3 objekty jsou defaultne "new style", kdezto v Py2 jsou defaultne "old style", a "new style" objekty musi dedit od predka "object". Rozdil mezi "old style" a "new style" je celkem velky - at uz pri volani konstruktoru predku, tak pri vyhodnocovani, kterou funkci zavolat (jestli z predka nebo potomka). "old style" moc nepouzivam, tak to nevim presne, ale myslim, ze s nimi se hur dela polymorfismus.