title: Member from parent in derived classes interfere, depending on initialisation
body: <p>Why is <code>letters</code> shared between child instances below?</p>
  <pre><code>class Parent:
      letters = list()
  
      def add(self, letter):
          self.letters.append(letter)
  
  class A(Parent):
      def add_a(self):
          self.add('a')
  
  class B(Parent):
      def add_b(self):
          self.add('b')
  
  a = A()
  b = B()
  
  a.add_a()
  b.add_b()
  
  print(a.letters)
  # a.letters now contains a renegade b!
  </code></pre>
  <p>If I redefine <code>Parent</code> as such</p>
  <pre><code>class Parent:
      def __init__(self):
          self.letters = list()
  
      def add(self, letter):
          self.letters.append(letter)
  </code></pre>
  <p><code>a</code> and <code>b</code> have separate lists of <code>letters</code>. This what I would've expected from the first code. What's the difference?</p>