
On Thu, Feb 11, 2010 at 03:21:27PM +0000, Matthew Russell wrote:
this seems to work in python 2.x and python3.1, although I suspect it's a bug.
t = (1, 2) t += (3,) t (1, 2, 3)
It's not a bug. += is not obliged to increase (extend) objects in place. In case of read-only objects += creates a new extended object and returns it:
a = 2 a += 1 print a 3
You don't suppose that 2 magically became 3, do you? Instead += replaces an integer object pointed to by a with a different integer object. The same is true for tuples. The original tuple of len 2 was replaced by a completely new tuple of len 3. If you hold a reference to the original tuple you can find it's still intact:
a = (1, 2) b = a # b *is not* a copy, b holds a reference *to the same tuple* a += (3,) # Now points to a different tuple a (1, 2, 3) b # But the original tuple is still the same (1, 2)
Oleg. -- Oleg Broytman http://phd.pp.ru/ phd@phd.pp.ru Programmers don't die, they just GOSUB without RETURN.