我在python中有这段代码,我无法理解,因为这些函数封装在类中后如何保持其状态。
class Param(object):
def bad_append(self, item, l=[]):
l.append(item)
return l
p = Param()
print(p.bad_append(1))
print(p.bad_append(2))
pp = Param()
print(pp.bad_append(100))
输出
[1]
[1, 2]
[1, 2, 100]
我不明白为什么pp的输出是[1, 2, 100]
而不是[100]
。
答案 0 :(得分:2)
您遇到的问题是Python的陷阱,该函数的默认参数是全局共享值。让我建议以下更改:
def bad_append(self, item, l=None):
l = l or []
#rest of code...
通过将默认值设置为None
,然后重新分配给任何列表,您将避免共享状态。