Is behavior of += intentional for int?
Steven D'Aprano
steve at REMOVE-THIS-cybersource.com.au
Sat Aug 29 15:03:23 EDT 2009
On Sat, 29 Aug 2009 11:11:43 -0700, zaur wrote:
> I thought that int as object will stay the same object after += but with
> another integer value. My intuition said me that int object which
> represent integer value should behave this way.
If it did, then you would have this behaviour:
>>> n = 3 # bind the name n to the object 3
>>> saved_id = id(n) # get the id of the object
>>> n += 1 # add one to the object 3
>>> assert n == 4 # confirm that it has value four
>>> assert id(n) == saved_id # confirm that it is the same object
>>> m = 3 # bind the name m to the object 3
>>> print m + 1 # but object 3 has been modified
5
This would be pretty disturbing behaviour, and anything but intuitive.
Fortunately, Python avoids this behaviour by making ints immutable. You
can't change the object 3 to have any other value, it will always have
value three, and consequently n+=1 assigns a new object to n.
--
Steven
More information about the Python-list
mailing list