¿Por qué + = se comporta inesperadamente en las listas?

los+= El operador en Python parece estar operando inesperadamente en las listas. ¿Alguien puede decirme qué está pasando aquí?

class foo:  
     bar = []
     def __init__(self,x):
         self.bar += [x]


class foo2:
     bar = []
     def __init__(self,x):
          self.bar = self.bar + [x]

f = foo(1)
g = foo(2)
print f.bar
print g.bar 

f.bar += [3]
print f.bar
print g.bar

f.bar = f.bar + [4]
print f.bar
print g.bar

f = foo2(1)
g = foo2(2)
print f.bar 
print g.bar 

SALIDA

[1, 2]
[1, 2]
[1, 2, 3]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3]
[1]
[2]

foo += bar parece afectar cada instancia de la clase, mientras quefoo = foo + bar parece comportarse de la forma en que esperaría que las cosas se comporten.

los+= El operador se denomina "operador de asignación compuesto".

Respuestas a la pregunta(7)

Su respuesta a la pregunta