* Terry Reedy:
* Alf P. Steinbach:
* Aahz:
and sometimes
they rebind the original target to the same object.
At the Python level that seems to be an undetectable null-operation.
If you try t=(1,2,3); t[1]+=3, if very much matters that a rebind occurs.
Testing:
<test lang="py3">
>>> t = ([], [], [])
>>> t
([], [], [])
>>> t[0] += ["blah"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> t
(['blah'], [], [])
>>> _
</test>
Yep, it matters.
Is this change-but-raise-exception a bug?
I seem to have a knack for running into bugs. :-)
Granted one could see something going on in a machine code or byte code
debugger. But making that distinction (doing nothing versus
self-assignment) at the Python level seems, to me, to be meaningless.
Please do not confuse things. Augmented *assignment* must be understood
as assignment. Failure to do so leads (and has lead) newbies into
confusion, and puzzled posts on this list.
OK.
But I think it would be less confusing, less breaking of expectations, if, for
the example above, += reduced to the functionality of extend(), with no x.
Cheers, & thanks,
- Alf
--
http://mail.python.org/mailman/listinfo/python-list