¿Cómo puede Python comparar cadenas con enteros?

Dado el siguiente código:

a = '1'
if a == 1:
    print 'yes'
else:
    print 'no'

obtenemos salida comono.

¿Cómo está comparando Python un valor de cadena con un int aquí (if a == 1)? En C, dicha comparación daría un error porque está comparando diferentes tipos.