Question

In the following code, I thought list wouldbe a unique variable to each object constructed. Why is it shared as a class variable?

01 class Thing(object):
02     def __init__(self, my_list=[]): 
03         self.list = my_list 
04         return 
05 
06 thing1=Thing()
07 thing2=Thing()
08 thing1.list.append(1)
09 print thing2.list     

id(thing1) is distinct from id(things2) but id(thing1.list) is the same as id(thing2.list).

If I use self.list = [] on line 3, the attribute is unique to each Thing. If I use thing1 = Thing(my_list=[]) on line 6, and similarly on line 7, then the attribute is unique to each Thing.

I am running Python 2.7 within the Canopy environment.

Was it helpful?

Solution

You should be doing something like this:

01 class Thing(object):
02     def __init__(self, my_list=None):
03         if my_list is None:
04           my_list = []
04         self.list = my_list 

See this post for an explanation as to why keyword arguments behave this way.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top