类型列表的实例变量表现为类变量

时间:2013-10-03 22:18:31

标签: python instance-variables class-variables canopy

在下面的代码中,我认为list对于每个构造的对象都是唯一的变量。为什么它作为类变量共享?

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)id(things2)不同,但id(thing1.list)id(thing2.list)相同。

如果我在第3行使用self.list = [],则该属性对每个Thing都是唯一的。 如果我在第6行使用thing1 = Thing(my_list=[]),在第7行使用类似,则该属性对每个Thing都是唯一的。

我在Canopy环境中运行Python 2.7。

1 个答案:

答案 0 :(得分:2)

你应该这样做:

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 

请参阅this post以获取关于为什么关键字参数以这种方式运行的解释。