【发布时间】:2012-07-04 07:00:39
【问题描述】:
可能重复:
“Least Astonishment” in Python: The Mutable Default Argument
我发现我的类的 init() 函数的字典参数默认为我之前在以前的实例中设置的值。我真的不明白这种行为,列表或基本变量似乎不会发生这种情况。示例代码:
class TestClass:
def __init__(
self,
adir={},
alist=[],
avar=None
):
print("input adir: " + str(adir)) #for test2, shows test1.mydir
self.mydir = adir
self.mylist = alist
self.myvar = avar
test1 = TestClass()
test1.mydir['a'] = 'A'
test1.mylist = ['foo']
test1.myvar = 5
test2 = TestClass()
print(test2.mydir) #has same value of test1!
print(test2.mylist)
print(test2.myvar)
输出如下所示: 初始化测试1 输入地址:{} 初始化测试2 输入 adir: {'a': 'A'} {'a':'A'} [] 没有 为什么将 test2 的字典参数 (adir) 设置为 test1.mydir?特别是,为什么其行为与其他可变类型(如列表)不同?
谢谢!
【问题讨论】:
-
mydir与mylist行为不同的唯一原因是您设置了test1.mydir的元素,但您替换了test1.mylist。否则这又是可变的默认参数问题。
标签: python class dictionary python-2.7 instance-variables