Если я добавлю массив в другой, Numpy, похоже, сделает копию исходного массива:
>>> a = np.array([2,3])
...: b = a
...: a = a+np.array([1,1])
...: print a, b
[3 4] [2 3]
Напротив, если я использую идиому +=
, исходный массив кажется измененным на месте.
>>> a = np.array([2,3])
...: b = a
...: a += np.array([1,1])
...: print a, b
[3 4] [3 4]
Что здесь происходит? Когда массивы изменяются на месте и когда они автоматически копируются?
x += y
не эквивалентноx = x + y
. Первое определяется тем, что тип объекта определяет для__iadd__
, а второе тем, что тип определяет__add__
. Соглашение заключается в том, что если тип является изменяемым,__iadd__
должен работать на месте. Так, например, с объектомlist
+=
изменит список на месте, но для объектовtuple
илиint
, которые являются неизменяемыми, будут созданы новые объекты и назначеныx
. - person juanpa.arrivillaga   schedule 26.12.2018numpy
, но просто для ясности, это для любого объекта Python. А для определяемых пользователем объектов поведение__iadd__
и__add__
будет определяться пользователем, и они действительно могут делать что угодно. - person juanpa.arrivillaga   schedule 26.12.2018