In article <87hc3un1vn.fsf....@metalzone.distorted.org.uk>, Mark Wooding <m...@distorted.org.uk> wrote: > > * Python augmented-assignment (`+=', for example) is inconsistent. > Depending on what type of object the left-hand side evaluates to, it > may /either/ mutate that object, /or/ assign a new value to the > expression.
Actually, that is not correct. The augmented assignment always binds a new value to the name; the gotcha is that with a mutable object, the object returns ``self`` from the augmented assignment method rather than creating a new object and returning that. IOW, the smarts are always with the object, not with the augmented assignment bytecode. The best way to illustrate this: >>> a = (1, ['foo'], 'xyzzy') >>> a[1].append('bar') >>> a (1, ['foo', 'bar'], 'xyzzy') >>> a[1] = 9 Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: object doesn't support item assignment >>> a (1, ['foo', 'bar'], 'xyzzy') >>> a[1] += ['spam'] Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: object doesn't support item assignment >>> a (1, ['foo', 'bar', 'spam'], 'xyzzy') -- Aahz (a...@pythoncraft.com) <*> http://www.pythoncraft.com/ Weinberg's Second Law: If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization. -- http://mail.python.org/mailman/listinfo/python-list