a + b вызывает метод __add__ типа, а a += b вызывает метод __iadd__. Если метод __iadd__ реализован, то ожидается, что он изменит текущий объект. Если __iadd__ не реализован, то используется __add__. Это можно найти в документации.Логично получается, что __iadd__ имеет смысл для изменяемых типов данных, а для неизменяемых a += b всегда будет выполняться как a = a + b. Среди стандартных типов данных я нашёл метод __iadd__ только у типа list