Cuál es la diferencia entre las funciones de rango y xrange en Python 2.X?

Aparentemente, xrange es más rápido, pero no tengo idea de por qué es más rápido (y no hay pruebas además de lo anecdótico hasta ahora que es más rápido) o qué es diferente de

for i in range(0, 20):
for i in xrange(0, 20):