两段代码:
第一段:
class List(object):
def __init__(self):
self.list=[]
list1=List()
list1.list.append('12')
list2=List()
print(list2.list)
结果是[]
第二段:
class List(object):
def __init__(self,list=[]):
self.list=list
self.str=str
list1=List()
list1.list.append('12')
list2=List()
print(list2.list)
结果是['12']
Python的默认参数是定义的时候生成的,不是调用的时候生成的,所以第二段代码等价于:
以后每次调用的时候,默认参数其实都是引用同一个
list
。这会给人造成很大的迷惑,这可能是当初设计上的失误了。为了避免这种现象,最好的办法是,始终使用
None
作为默认参数,然后用if判断来赋值。