Is it that it is more consistent in places?
No more long type
Division that works as expected
Annotations
No more xrange, iteritems etc, instead you get iterators everywhere
f-strings
Less duplicates (xrange vs range, itemview/iteritems/items(), map/itertols.map,).
Entering french in comments will not crash the program even if you didn't give "the unicode talk". Clear type for raw bytes with a proper name.
Way less verbose (no __future__, no u, no object, no codecs import, f-strings, simple super(), etc)
Debugging is easier (debug messages are better, exception chaining, division makes sense, repr is clearer)
You can't shoot yourself in the foot as much (ordering "1" and 1, assigning to True ...)
Less stuff to learn (e.g: pathlib instead of os/shutils/glob/codecs)
And that's just out of my head.