Python-Klassenvariable int vs array

Ich habe mit Python-Klassen herumgespielt und bin zu dem folgenden Beispiel gekommen, in dem zwei Variablen, die statische Klassenvariablen zu sein scheinen, ein unterschiedliches Verhalten aufweisen, wenn sie geändert werden.

Was ist denn hier los? Mein erster Instinkt ist, dass mit Referenzen etwas heikles los ist.

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)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage