"Ben" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED]
<snip> > This seems to work without any errors. But bizzarely I find that > whatever my record number, the instance of "my_class" is appended to > every list. So in this case > > self.mop_list[0].my_list.append(my_class(Some data for the > constructor)) > > I would expect to append an instance of my_class to > self.mop_list[0].my_list > > But annoyingly > > self.mop_list[0].my_list > self.mop_list[3].my_list > self.mop_list[7].my_list > > all have an instance of my_class created and appended to them. This is > really confusing and quite annoying - I don't know whether anyone out > there can make head or tail of what I'm doing wrong? Well, it's a little bit difficult, but I think I actually know what's going on. You probably need some code that looks something like this, to ensure each object has it's own, independent list: class record: def __init__(self, init_list=None): self.my_list = [] if init_list is not None: self.my_list.extend(init_list) Here's what I think you are doing, and below should make it clear why that doesn't work: class record: def __init__(self, init_list=[]): That list above, the default initializer is constructed just once (when the def statement executes)! >>> class record: ... def __init__(self, init_list=[]): ... self.my_list = init_list ... >>> r1 = record() >>> r1.my_list [] >>> r2 = record() >>> r2.my_list [] >>> r2.my_list.append('boo!') >>> r1.my_list ['boo!'] >>> >>> l1 = range(1, 4) >>> l1 [1, 2, 3] >>> r1 = record(l1) >>> r2 = record(l1) >>> r1.my_list [1, 2, 3] >>> r2.my_list [1, 2, 3] >>> r1.my_list.append(42) >>> l1 [1, 2, 3, 42] >>> r1.my_list [1, 2, 3, 42] >>> r2.my_list [1, 2, 3, 42] >>> -- http://mail.python.org/mailman/listinfo/python-list