
But the "problem" here is that augmented assignment shouldn't work on immutables at all.
The problem is that the way augmented assignment works is to first treat the target as an expression, then call __iadd__ on the result, then assign the result of that back to the target.
Right - I figured that out, and found the FAQ. But why does it work that way? Because it needs to work on immutable objects. If it didn't, then you wouldn't need the "assign back to the original name" step. Let's look at __iadd__: If it's in-place for a mutable object, it needs to return self. But the python standard practice is that methods that mutate objects shouldn't return self ( like list.sort() ) for instance. But if you want the augmented assignment operators to support immutables, there needs to be a way to get a new object back -- thus the bind, and the confusing, limiting behavior. But it's what we've got. Is there a lesson here for the additional unpacking being proposed? I have no idea. -Chris - CHB