Variable de clase Python int vs array

Estaba jugando con clases de Python y llegué al siguiente ejemplo en el que dos variables que parecen ser variables de clase estáticas tienen un comportamiento diferente cuando se modifican.

¿Que está pasando aqui? Mi primer instinto es que algo complicado está pasando con las referencias.

class Foo:
    a = []
    n = 0
    def bar(self):
            self.a.append('foo')
            self.n += 1

x = Foo()
print x.a, x.n    ([] 0)
x.bar()
print x.a, x.n    (['foo', 1])
y = Foo()
print y.a, y.n    (['foo', 0])
y.bar()
print y.a, y.n    (['foo', 'foo'], 1)

Respuestas a la pregunta(1)

Su respuesta a la pregunta