They are different because there are seperate operators for + and +=. With x = x + 1, the interpreter will treat it like x = x.__add__(1), while x += 1 will be x = x.__iadd(1), which can be much more efficient because it doesn't necessarily need to make a copy of x.