^=, -= and += symbols in Python
As almost any modern language, Python has assignment operators so they can use them every time you want to assign a value to a variable after doing some arithmetic or logical operation, both (assignment and operation) are expressed in a compact way in one statement...
Table from Tutorials Point:
Operator Description Example = Assigns values from right side operands to left side operand c = a + b assigns value of a + b into c += Add AND It adds right operand to the left operand and assign the result to left operand c += a is equivalent to c = c + a -= Subtract AND It subtracts right operand from the left operand and assign the result to left operand c -= a is equivalent to c = c - a *= Multiply AND It multiplies right operand with the left operand and assign the result to left operand c *= a is equivalent to c = c * a /= Divide AND It divides left operand with the right operand and assign the result to left operand c /= a is equivalent to c = c / a %= Modulus AND It takes modulus using two operands and assign the result to left operand c %= a is equivalent to c = c % a **= Exponent AND Performs exponential (power) calculation on operators and assign value to the left operand c **= a is equivalent to c = c ** a //= Floor Division It performs floor division on operators and assign value to the left operand c //= a is equivalent to c = c // a
When you compute X = X + Y
you are actually returning the sum of X
and Y
into a new variable, which, in your example, overwrites the previous value of X
. When you use an assignment operator in the form of X += 1
, the value 1
is directly summed on the current value of X
, without returning the result in a new variable. Take a look at the code below:
>>> V = np.arange(10)
>>> view = V[3:] # view is just a subspace (reference) of the V array
>>> print(V);print(view)
[0 1 2 3 4 5 6 7 8 9]
[3 4 5 6 7 8 9]
>>> view = view + 3 # add view to a constant in a new variable
>>> print(V);print(view)
[0 1 2 3 4 5 6 7 8 9]
[ 6 7 8 9 10 11 12]
>>> view = V[3:]
>>> view += 3 # here you actually modify the value of V
>>> print(V);print(view)
[ 0 1 2 6 7 8 9 10 11 12]
[ 6 7 8 9 10 11 12]
You can also look for the documentation of numpy.ndarray.base
to check if an array is actually a reference of another array.