可能重复:
“Least Astonishment” in Python: The Mutable Default Argument
我对以下内容感到困惑。我有一个基类:
class MyBase:
def __init__(self, store=set()):
self._store = store
现在子类继承了MyBase
class Child1(MyBase):
pass
class Child2(MyBase)
pass
然后,
child1 = Child1()
child2 = Child2()
print(id(child1._store) = id(child2._store))
>>> True
为什么这些实例具有共享_store ??
如果你能帮助我,我真的很感激。
此致 NAV
答案 0 :(得分:3)
set()在解析父类的__init__
时创建一次。
要解决此问题,请更改以下代码:
class MyBase:
def __init__(self, store=None):
if store is None:
store = set()
self._store = store