次の例を想定します。
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 でも同じように機能します。
ありがとう、ペトル