1.不要使用空列表作为关键字参数的默认值。
class A(object):
def __init__(self, em_list=[]):
self.s = em_list
def add(self, a):
self.s.append(a)
a = A()
b = A()
a.add('s')
b.s
这段代码执行中,在a和b实例化的时候,构造函数的空列表在内存中指向同一个区域。因此a和b的对象属性s其实指向了同一个空列表。
虽然不知道为什么在初始化的过程中如果传入一个空列表,系统会指向同一个,但是这种问题需要避免。
class A(object):
def __init__(self, em_list):
self.s = em_list
def add(self, a):
self.s.append(a)
a = A([])
b = A([])
a.add('s')
b.s