Is behavior of += intentional for int?
Günther Dietrich
gd_usenet at spamfence.net
Sat Aug 29 09:23:20 EDT 2009
zaur <szport at gmail.com> wrote:
>Python 2.6.2 (r262:71600, Apr 16 2009, 09:17:39)
>[GCC 4.0.1 (Apple Computer, Inc. build 5250)] on darwin
>Type "copyright", "credits" or "license()" for more information.
>>>> a=1
>>>> x=[a]
>>>> id(a)==id(x[0])
>True
>>>> a+=1
>>>> a
>2
>>>> x[0]
>1
>
>I thought that += should only change the value of the int object. But
>+= create new.
>Is this intentional?
An integer variable contains the reference (ID) to an (immutable)
integer object; it doesn't contain the value itself. So, when you assign
a new value to an integer variable, it will contain the reference to the
object containing the new value, afterwards.
If you assign an integer variable to a list element, this reference will
be written into the list. The assignment of a new value to the integer
variable will create a new integer object, containing the new value, and
put the reference to it into the integer variable.
The reference to the object with the old value, that is stored in the
list, won't be touched.
In fact, it is a result of integers in python being immutable.
Best regards,
Günther
More information about the Python-list
mailing list