假设以下示例:
class Example(object):
def __init__(self, data=[]):
self.data = data
如果data
没有给出参数,实例变量将被初始化为默认值——一个空列表。但请考虑以下会话:
>>> e = Example()
>>> print(e.data)
[]
>>> e.data.append(1)
>>> print(e.data)
[1]
>>> e = Example()
>>> print(e.data)
[1]
首先,Example
创建一个实例时没有指定确切的参数值,因此使用默认值。这是预期的。
然后,成员变量被修改,其状态按预期改变。
最后,再次创建一个新的实例,Example
方法与第一种情况相同。然而,成员变量的内容是不同的——变量的值以某种方式“幸存”了一个新实例的创建。为什么?
这是预期的行为吗?我究竟做错了什么?
这个特定的会话是在 Python 2.7 中完成的,但它在 Python 3.3 中的工作方式相同。
谢谢,彼得