¿En qué se diferencia irange () de range () o xrange ()?

Estaba pasando por Python Generators Wiki cuando me encontré con estoRangeGenerator página que habla deirange() -

Esto nos permitirá iterar sobre grandes extensiones de números sin recurrir a xrange, que es una lista perezosa en lugar de un generador.

Parece que no puedo entender el conjunto de pruebas y la implementación descrita en esa página. Yo sé esorange() crea una lista en la memoria (desde el punto de vista de Python 2.7) yxrange() Es un generador. Como esirange() ¿algo diferente?