On Mon, 16 Dec 2013 11:30:13 +0800 liuerfire Wang <liuerf...@gmail.com> wrote:
> Just like below: > > In [1]: a = ([], []) > > In [2]: a[0].append(1) > > In [3]: a > Out[3]: ([1], []) > > In [4]: a[0] += [1] > --------------------------------------------------------------------------- > TypeError Traceback (most recent call > last) <ipython-input-4-ea29ca190a4d> in <module>() > ----> 1 a[0] += [1] > > TypeError: 'tuple' object does not support item assignment > > In [5]: a > Out[5]: ([1, 1], []) > > no problem, there is an exception. But a is still changed. > > is this a bug, or could anyone explain it? > > thanks. > This thread from two years ago deals with this in some detail: https://mail.python.org/pipermail/python-list/2012-February/619265.html It's one of those things that is hard to resolve in a way that makes sense in every situation. The weirdest part for me is this: >>> t = ([],) >>> l = t[0] >>> l is t[0] True >>> l += [1] >>> t[0] += [1] Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'tuple' object does not support item assignment Whether there is an error or not depends on the name used for the object! -- John -- https://mail.python.org/mailman/listinfo/python-list