On Jan 18, 2008 3:09 PM, Zbigniew Braniecki <[EMAIL PROTECTED]> wrote: > I found a bug in my code today, and spent an hour trying to locate it > and then minimize the testcase. > > Once I did it, I'm still confused about the behavior and I could not > find any reference to this behavior in docs. > > testcase: > > class A(): > > def add (self, el): > self.lst.extend(el) > > def __init__ (self, val=[]): > print val > self.lst = val > > > def test (): > x = A() > x.add(["foo1","foo2"]) > b = A() > > > So, what I would expect here is that I will create two instances of > class A with empty self.lst property. Right? > > In fact (at least with my Python 2.5) > > [EMAIL PROTECTED]:~/projects/pyl10n$ ./scripts/test.py > [] > ['foo1', 'foo2'] > > This bug does not happen when I switch to __init__ (self, *args) and > assign self.lst= args[0]. > > Any clue on what's going on here, and/if where I should report it?
It is a FAQ, not a bug: http://www.python.org/doc/faq/general/#why-are-default-values-shared-between-objects http://effbot.org/pyfaq/why-are-default-values-shared-between-objects.htm -- http://www.advogato.org/person/eopadoan/ Bookmarks: http://del.icio.us/edcrypt -- http://mail.python.org/mailman/listinfo/python-list