Zmienna klasy Python int vs array

Bawiłem się klasami Pythona i doszedłem do następującego przykładu, w którym dwie zmienne, które wydają się być statycznymi zmiennymi klasowymi, mają inne zachowanie po zmodyfikowaniu.

Co tu się dzieje? Moim pierwszym instynktem jest to, że dzieje się coś trudnego z odniesieniami.

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