While technically true, that seems to be sidestepping the point from my POV.
really? are you arguing that when Ping says that for-in shouldn't destroy the target, he's really saying that python shouldn't allow methods to have side effects if they can be called from an expression used in a for-in statement? why would he say that?
I think that few people see for loops as inherently non-destructive due to the use case I presented above.
I think most people can tell the difference between an object and a method with side-effects. I doubt they would be able to get much done in Python if they couldn't.
Beyond that, the for loop is itself inherently mutating in Python older than 2.2
in what sense? it calls the object's __getitem__ method with an integer index value, until it gets an IndexError. in what way is that "inherently mutating"?