On Sat, 14 Apr 2007 16:03:03 -0400, Bart Willems wrote:
> I can try this in interactive mode: > >>> a = 5 > >>> b = a > >>> a += 1 > >>> print b > 5 > > So, if /a/ and /b/ where pointing to the *same* "5" in memory, then I > would expect b to be increased, just as a. This is what you are implicitly _thinking_: "a" points to a memory location, holding a few bytes with the bit pattern 0x05. When I add 1 to it, the bytes change to 0x06. But integers in Python aren't bit patterns, they are objects. You can't make the 5 object have value 6, that would be terrible: py> 5 + 5 # remember that 5 has been changed to have value six! 12 So a += 1 rebinds the name "a" to the object 6. The name "b" still points to the object 5, because you didn't do anything to "b". Now, for extra credit: can you explain why this happens? >>> alist = [0] >>> blist = alist >>> alist += [1] >>> blist [0, 1] -- Steven. -- http://mail.python.org/mailman/listinfo/python-list