1

なぜこれが期待どおりに機能しないのですか(少なくとも私にとっては)?理由がわかりません。

class Fred:
    def __init__(self):
          self.a=0

fred=Fred()
lista=[]

for i in range(5):
    fred.a=i
    lista.append(fred)

for i in lista:
    print(str(i.a))

私が得るのは数字の4の5倍であり、0から4までではありません。コメントはありますか?ありがとう

4

2 に答える 2

1

何が起こっているのかというと、でループするたびにフレッドへの参照が上書きされているということですfor i in range(5)。そのループ内を移動してfred=Fred()毎回新しいオブジェクトを作成すると、期待どおりの結果が得られるはずです。

于 2012-10-28T04:46:14.700 に答える
0

1つのFredインスタンスがあり、その1つのインスタンスをリストに追加し続け、aその間にプロパティを変更します。Fredリストに追加しても、オブジェクトはコピーされません。同じオブジェクトへの別の参照を追加するだけです。Fredループの各反復内に新しいものを作成することで、期待される動作を得ることができます。

于 2012-10-28T04:46:53.203 に答える