Brian Harring schrieb:
For dict; it actually *cannot* work. You can't remove keys from a dict as you're iterating over it (can change the val of a key, but not remove the key).
I think this is incorrect. The implementation could well support it, putting a dummy object into the deleted key (which deletion needs to do, anyway).
So iter.delete would require fair bit of changes internally to dict, either tracking what it's yielded already, or forcing iterkeys to actually be iter(keys()) (creating an intermediate list), which is worse for memory usage and general performance.
I don't think either is necessary; deletion could occur "directly".
Set's suffer the same thing; can't change what it contains while iterating, have to restart the iteration after a removal/addition.
Again, I think that's incorrect.
Tuples are immutable, so end of discusion there.
True.
Now... occasionally, have to do it admittedly. But it's not something you actaully want to be doing in your code all that much- admittedly generating a new list to avoid that hit also sucks somewhat, but the worst case there is far more behaved, a temp trade of space vs runtime.
Also true. Regards, Martin