假设以下示例:
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中也是如此。
谢谢,彼得