I though that a += b
is just a shortcut for a = a + b
. It seems it is not quite. Here's an example:
>>> a = [1, 2, 3]
>>> b = a
>>> b += [4, 5, 6]
>>> b
[1, 2, 3, 4, 5, 6]
>>> a # is also changed
[1, 2, 3, 4, 5, 6]
But this works as expected:
>>> a = [1, 2, 3]
>>> b = a
>>> b = b + [4, 5, 6]
>>> b
[1, 2, 3, 4, 5, 6]
>>> a # not changed
[1, 2, 3]
Now, I understand that when I do b = a
, b
references the same list as a
does, and if I do some operations on b
, they automatically "apply" to a
(since they both point to the same list, and that when I do b = b + [4, 5, 6]
a new list is created and then assigned to b
, but my question is...why this distinction? I mean, shouldn't a += b
be a shorthand for a = a + b
? This is what one would have expected...What's the logical explanation for this?