title: Creating a list of objects in Python
body: <p>I'm trying to create a Python script that opens several databases and compares their contents.  In the process of creating that script, I've run into a problem in creating a list whose contents are objects that I've created.</p>
  
  <p>I've simplified the program to its bare bones for this posting. First I create a new class, create a new instance of it, assign it an attribute and then write it to a list.  Then I assign a new value to the instance and again write it to a list... and again and again...</p>
  
  <p>Problem is, it's always the same object so I'm really just changing the base object.  When I read the list, I get a repeat of the same object over and over.  </p>
  
  <p>So how do you write objects to a list within a loop?</p>
  
  <p>Here's my simplified code</p>
  
  <pre><code>class SimpleClass(object):
      pass
  
  x = SimpleClass
  # Then create an empty list
  simpleList = []
  #Then loop through from 0 to 3 adding an attribute to the instance 'x' of SimpleClass
  for count in range(0,4):       
      # each iteration creates a slightly different attribute value, and then prints it to
  # prove that step is working
  # but the problem is, I'm always updating a reference to 'x' and what I want to add to
  # simplelist is a new instance of x that contains the updated attribute
  
  x.attr1= '*Bob* '* count
  print "Loop Count: %s Attribute Value %s" % (count, x.attr1)
  simpleList.append(x)
  
  print '-'*20
  # And here I print out each instance of the object stored in the list 'simpleList'
  # and the problem surfaces.  Every element of 'simpleList' contains the same      attribute value
  
  y = SimpleClass
  print "Reading the attributes from the objects in the list"
  for count in range(0,4):
      y = simpleList[count]
      print y.attr1
  </code></pre>
  
  <p>So how do I (append, extend, copy or whatever) the elements of simpleList so that each entry contains a different instance of the object instead of all pointing to the same one?</p>