On 2005-04-25, Terry Reedy <[EMAIL PROTECTED]> wrote:
According to the language reference,
An augmented assignment expression like x += 1 can be rewritten as x = x + 1 to achieve a similar, but not exactly equal effect. In the augmented version, x is only evaluated once.
I don't consider the two results you posted "similar".
It continues
"Also, when possible, the actual operation is performed in-place, meaning that rather than creating a new object and assigning that to the target, the old object is modified instead. ...Similarly, with the exception of the possible in-place behavior, the binary operation performed by augmented assignment is the same as the normal binary operations.
"
I take the behavior observed to be the exceptional in-place behavior referred to.
I certainly don't see how. Strings are immutable. The old object can't be modified in-place, so the "in-place" behavior is moot.
It's the left-hand-side, in this case a list, that gets modified in-place. Whether the right-hand-side is mutable or not is irrelevant.
In any case, the only difference is supposed to be whether a
new object is created or an existing object is modified. The
two results shouldn't be completely different as shown by the
OP.
Your quote states quite clearly that the binary operation *is the same* whether it's spelt a = a + b or a += b. That is simply not true for the example we're discussing.
No, the quote says "with the exception of the possible in-place behavior, the binary operation performed by augmented assignment is the same as the normal binary operations." This is "in-place" behavior. Badly designed "in-place" behavior, yes.
But this could certainly be clearer.
I don't see how that statement has anything to do with the bug at hand.
It's a mistake, but it's been in the wild too long to be changed. Thus, it should be documented.
-- Robert Kern [EMAIL PROTECTED]
"In the fields of hell where the grass grows high Are the graves of dreams allowed to die." -- Richard Harter
-- http://mail.python.org/mailman/listinfo/python-list