Вы демонстрируете фундаментальное недоразумение.
Вы никогда не создавали экземпляр SimpleClass вообще, потому что Вы не назвали его.
for count in xrange(4):
x = SimpleClass()
x.attr = count
simplelist.append(x)
Или, если Вы позволяете классу взять параметры, вместо этого, можно использовать понимание списка.
simplelist = [SimpleClass(count) for count in xrange(4)]
Для заполнения списка отдельными экземплярами класса можно использовать для цикла в объявлении списка. * умножаются, свяжет каждую копию с тем же экземпляром.
instancelist = [ MyClass() for i in range(29)]
и затем получают доступ к экземплярам через индекс списка.
instancelist[5].attr1 = 'whamma'
Не должно быть необходимо воссоздать объект SimpleClass каждый раз, как некоторые предполагают, если Вы просто используете его для выходных данных на основе его атрибутов. Однако Вы на самом деле не создаете экземпляр класса; Вы просто создаете ссылку на сам объект класса. Поэтому Вы добавляете, что ссылка на тот же класс приписывает списку (вместо атрибута экземпляра), много раз.
Вместо:
x = SimpleClass
Вам нужно:
x = SimpleClass()
Создайте новый экземпляр каждый раз, где каждый новый экземпляр имеет корректное состояние, вместо того, чтобы постоянно изменить состояние того же экземпляра.
Поочередно, сохраните явно сделанную копию объекта (использование подсказки на уровне этой страницы ) на каждом шаге, а не оригинале.
Если я понимаю правильно Ваш вопрос, Вы спрашиваете способ выполнить глубокую копию объекта. Что относительно того, чтобы использовать copy.deepcopy?
import copy
x = SimpleClass()
for count in range(0,4):
y = copy.deepcopy(x)
(...)
y.attr1= '*Bob* '* count
А deepcopy является рекурсивной копией всего объекта. Для более ссылочного можно взглянуть на документацию Python: https://docs.python.org/2/library/copy.html