люди зачем вникать во все это , на мой взглад все намного проще : насколько всем известно строку можно представить как массив из символов (из которых составлена строка) соответственно цикл видя строку как массив ее и перебирает как массив , а если уж интересны именно технические аспекты то py.user.next описал их вам , тоесть если сбацать так :
вы увидите вот что :
<iterator object at 0xb735392c>
по той причине что для этого типа обьектов нет инструкций для вывода в читаемом виде но :
a = iter("123")
print a.next()
print a.next()
print a.next()
выдаст на гора :
вроде все обьяснил , ну а если есть желание получше понять что такое итератор потыкайте модуль itertools почитывая доки естессна , и тогда я думаю абсолютно все вопросы отпадут