Да нет же. В обоих случаях сначала и имени a, и имени b присваивается один и тот же объект в памяти, но потом, в первом случает перед операцией сложения в памяти создаётся новый объект и уже потом снова присваивается имени b, а во втором случае происходит модификация объекта в памяти на прямую.
Опять же, это свойство мутабельных объектов, а немутабельные в обоих случаях ведут себя одинаково ожидаемо.
Например list — мутабельный, как и array в numpy:
>>> a = [1]
>>> b = a
>>> b = b + [1]
>>> print(a, b)
[1] [1, 1]
>>> a = [1]
>>> b = a
>>> b += [1]
>>> print(a, b)
[1, 1] [1, 1]

а tuple — немутабельный:
>>> a = (1,)
>>> b = a
>>> b = b + (1,)
>>> print(a, b)
(1,) (1, 1)
>>> a = (1,)
>>> b = a
>>> b += (1,)
>>> print(a, b)
(1,) (1, 1)

В Питоне нет переменных как таковых, в питоне все идентификаторы — это ссылки на объект в памяти.
Только покойник не ссыт в рукомойник.
А, не немного по другому. В первом случае мы присваиваем тому же идентификатору новый объект, а во втором мы редактируем объект на месте. Это работает со всеми мутабильными объёктами.

Так что любой язык надо знать хочь чуть-чуть поглубже, чем a=b, а в Плюсах таких тонкостей в мильён раз больше.
Нифига. В первом случае выполняется метод __add__, а во втором __iadd__. Вот где-то там в нумпае видимо и зарыта разница.
Точняк, навешал я всяких лулзов на стены. Висело десять лет, всех всё устраивало. Пришёл новый начальник и теперь лулзов нет.
У тебя ещё целых два года. Дерзай!
Хоть меня и задолбали на работе своей ТБ (Это, кстати, теперь Охрана труда называется. Зачем труд охранять? От кого?), но тут без всяких формальностей очевидно, что мужики — дебилы, с головой не дружат ваще.
Спасибо.
You're do it wrong.
Найди людей.