¿Cómo compara Python 2 string e int? ¿Por qué las listas se comparan como mayores que los números y las tuplas como mayores que las listas?

El siguiente fragmento se anota con la salida (como se ve en ideone.com):

print "100" < "2"      # True
print "5" > "9"        # False

print "100" < 2        # False
print 100 < "2"        # True

print 5 > "9"          # False
print "5" > 9          # True

print [] > float('inf') # True
print () > []          # True

¿Alguien puede explicar por qué la salida es como tal?

Detalles de implementacion¿Es este comportamiento obligatorio por la especificación del lenguaje, o depende de los implementadores?¿Hay diferencias entre alguna de las principales implementaciones de Python?¿Hay diferencias entre las versiones del lenguaje Python?

Respuestas a la pregunta(2)

Su respuesta a la pregunta