0

假设以下示例:

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 中的工作方式相同。

谢谢,彼得

4

0 回答 0