Python 2.7 为什么实例变量(列表)会在for循环中增长?
在下面的代码中,我希望每次在for循环中都会创建一个名为“obj”的MyClass的新实例。因此,每次输出应为[1]。但obj.mylist似乎在增长。我错过了什么Python 2.7 为什么实例变量(列表)会在for循环中增长?,python-2.7,instance-variables,Python 2.7,Instance Variables,在下面的代码中,我希望每次在for循环中都会创建一个名为“obj”的MyClass的新实例。因此,每次输出应为[1]。但obj.mylist似乎在增长。我错过了什么 class MyClass: def __init__( self, mylist_=[] ): self.mylist = mylist_ def addData( self ): self.mylist.append( 1 ) for i in range(5): o
class MyClass:
def __init__( self, mylist_=[] ):
self.mylist = mylist_
def addData( self ):
self.mylist.append( 1 )
for i in range(5):
obj = MyClass()
obj.addData()
print obj.mylist
输出为:
[1]
[1, 1]
[1, 1, 1]
[1, 1, 1, 1]
[1, 1, 1, 1, 1]
长话短说,参数的默认值在定义函数的语句执行时创建一次 请参阅: 默认值在定义范围内的函数定义点进行计算,以便 重要警告:默认值仅计算一次。当默认值是可变对象(如列表、字典或大多数类的实例)时,这会有所不同 - 此参考还包含不遵循警告的示例-非常类似的情况和观察到的行为 其他参考资料:
- 不是bug: