Michael Foord <mich...@voidspace.org.uk> added the comment:

Because strings are immutable. Your list access (self.list.append) mutates the 
existing list in place.

Because strings are immutable you += is exactly equivalent to the following 
code:

    self.string = self.string + str(i)

The first lookup of self.string actually looks up the class attribute (because 
on a fresh instance there is no instance attribute). The class attribute is an 
empty string. You then create a new string by adding the empty string to str(i) 
and assign an *instance* attribute to str(i).

Because you haven't mutated the class attribute (strings are immutable) the 
next time round with a new instance the whole process repeats and the first 
lookup of self.string still finds the class attribute which is still an empty 
string.

With your example code try the following:

    print Lister.string
    print Lister()
    print Lister.string

You will see that the class attribute is unchanged in between instantiations. 
The += on immutable objects probably doesn't quite behave how you expect.

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue7800>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to