The way we get around this is by iterating over the original and build a temporary string that incorporates the change. We can then overwrite the original. This is a change by redefining, rather than by mutating.
Not necessary. A string is already an iterable. Just iterate the string. Since we already determined that changing the string is not an option, making a copy of the string is not the approach to use. And when we think of it, building a string goes against the mutation rule. That leaves a list as the temporary object.
new = 
Given that we are only reading the original string, we can use a look-up (item) rather than a range (index).
for char in text:
>>> revers("Take the long way home")
'emoh yaw gnol eht ekaT'