This is driving me insane!
Justin Shaw
wyojustin at hotmail.com
Thu Sep 26 20:52:00 EDT 2002
Lists are mutable. When you append to self.errorlog with self.grouptotals,
you have two references to the same list. One in self.errorlog[0] and one
in self.grouptotals. Therefore when you increment self.grouptotals in
grouptotalcounter() self.errorlog gets incremented too. You can either use
tuples in self.errorlog or you can COPY self.grouptotals into self.errorlog
if you want independent references.
class Test:
def __init__(self):
self.errorlog = []
pass
def run(self):
self.grouptotals = []
for i in range(2):
self.grouptotals.append(0)
print self.grouptotals # [0, 0]
self.errorlog.append(self.grouptotals[:]) # Note use of [:] to
shallow-copy list
print self.grouptotals
self.grouptotalcounter()
return self.errorlog
def grouptotalcounter(self):
for i in range(2):
self.grouptotals[i] += 1
"Derek Basch" <dbasch at yahoo.com> wrote in message
news:mailman.1033084697.25598.python-list at python.org...
> Hello,
> I created a very simple class that totals some data
> but I am not getting the output from it that I would
> expect at all.
> Here is the class:
> http://www.geocities.com/dbasch/insane.txt
>
> I would expect to get:
> [0, 0]
> [0, 0]
> [[0, 0]]
>
> but I am getting:
> [0, 0]
> [0, 0]
> [[1, 1]]
>
> I dont understand how the 'grouptotals' list is
> getting the incremented values prior to the
> 'grouptotalcounter' function being called.
> furthermore, I can place a 'print grouptotals' right
> after the errorlog append and it isnt the incremented
> values! Please tell me this isnt a normal thing!
> Thanks,
> Derek Basch
>
>
> __________________________________________________
> Do you Yahoo!?
> New DSL Internet Access from SBC & Yahoo!
> http://sbc.yahoo.com
>
More information about the Python-list
mailing list