Class warfare...

Erik Max Francis max at alcyone.com
Fri Sep 15 12:23:18 EDT 2000


Larry Whitley wrote:

> class Bucket():
>     def __init__(self):
>         self.cnt = 0
	...
> I suspect that my [Bucket()] is producing a reference to the class
> rather to
> an object that is an instance of the class.

You are correct.  The duplication operator * for lists duplicates
references, it doesn't make copies.  You can see that in something like
this:

>>> l = [[]] # a list containing an empty list
>>> print l
[[]]
>>> l = l * 5 # now a list of five empty lists
>>> print l
[[], [], [], [], []]
>>> l[0].append(1) # now insert a 1 in the first contained list
>>> print l # oops, they're all the same list
[[1], [1], [1], [1], [1]]

> >>> b = []
> >>> for i  in range( 5 ):
> >>>    b.append( Bucket() )
> 
> And repeat the experiment, I no
> And repeat the experiment, I now get what I expected.  Is this how
> it's
> supposed to be done?  Or is there a better way?

Yep, that's the traditional way to do it.

-- 
 Erik Max Francis / max at alcyone.com / http://www.alcyone.com/max/
 __ San Jose, CA, US / 37 20 N 121 53 W / ICQ16063900 / &tSftDotIotE
/  \ Nothing spoils a confession like repentence.
\__/ Anatole France
    Interstelen / http://www.interstelen.com/
 A multiplayer, strategic, turn-based Web game on an interstellar scale.



More information about the Python-list mailing list