Q:

How does Python string comparison _really_ work?

So, in Python, strings have an inherent ordering;
>>>'A' < 'B' < 'C'
True
>>>"angler" < "beta fish" < "coleocanth"
True

Most sources say strings in Python are ordered by ASCII code - except that's clearly nonsense, since Python 3 strings are Unicode. 
Obviously there's a defined ordering for A, B, C... and presumably other languages have similar alphabetical orderings. 
But how do you order, say, '♳', '▧' and 'ⵞ'? More to the point, how do you order Ａ, , , , , , , , , , , , , , , , A, and Ⱥ?
I'd assume it falls back to comparing Unicode code points; that'd be simplest and seems like a reasonable default, but it'd also suggest that, for example, `¾' < '⅐' < '↉', and '⓿' > '⓵' > '⒌' > '⑽' > '⑮', and "Ａ" > "C" (that's a fullwidth A) which seems a little... un-Pythonic, even if it is a really weird edge case.
Is there a more intricate set of rules that are used, and if so, where are they documented? Is it implementation-defined or is there a standard?

A:

From the docs (and frustratingly, not mentioned in the docs for the string type):

Strings (instances of str) compare lexicographically using the numerical Unicode code points (the result of the built-in function ord()) of their characters.

This is normative, and accurate to the implementation. You can view the Python 3.6.3 implementation of string comparison here.

