Variável de classe Python int vs array

Eu estava brincando com classes Python e cheguei ao seguinte exemplo, no qual duas variáveis ​​que parecem ser variáveis ​​de classe estáticas têm um comportamento diferente quando modificadas.

Oque esta acontecendo aqui? Meu primeiro instinto é que algo complicado está acontecendo com referências.

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)

questionAnswers(1)

yourAnswerToTheQuestion