В целом всё верно. range реализоан как класс, при его инстанцировании (или вызове в качестве функции. что в питоне, суть, одно и тоже) формируется инстанс этого класса, который поддерживает протокол получения итератора.
Если воспользоваться этим протоколом (iter(range(3, 33))
), то получим итератор - инстанс класса range_iterator.
Ещё инстанс range позволяет получать доступ к элементам по индексу, делать срезы, инвертировать, получать количество элементов, проверять на вхождение элемента и т.д.