1

次のことを行う次のクラスを作成しました。

class abc:
    def __init__(self):
        self.Values = []
    def add_code(self):
        lastval = self.Values
        print "self.Values  , ", self.Values
        print "lastval  , ", lastval
        lastval.append(1)
        print "self.Values 1, ", self.Values
        print "lastval 1 , ", lastval

        lastval.append(2)
        print "lastval 2 , ", lastval
        print "self.Values 2 , ", self.Values
        lastval.append(3)
        print "lastval 3 , ", lastval
        print "self.Values 3 , ", self.Values
        lastval.append(4)
        print "last val 4 ", lastval
        print "self.Values 4 , ", self.Values
        lastval = []
        print "last value is emtpy now? , ", lastval
        print "But the self.Values is not", self.Values
        return lastval

このコードを実行すると、変数lastvalに値が追加されていることがわかりますが、空のリストでself.Values 初期化すると、値が保持されていることがわかります。何が原因でしょうかlastvalself.Values

4

3 に答える 3

7

なぜそうでないと思うのですか?lastval最初に、 と同じリストを指すように代入するself.Valuesため、一方への変更が他方に表示されます。しかし、lastval = []単に新しいリストに再バインドlastvalするだけでは、まったく影響はありませんself.Values

于 2013-10-31T13:49:22.607 に答える
0

クラスはこれとは何の関係もありません (またはあまり関係ありません)。根本的な効果は、複数の変数が同じリストを保持できることです (これは代入によって発生します)。その後、リストを変更すると、すべての変数が変更されたように見えます。

それを避けるために、リストのコピーを作成することをお勧めします。

于 2013-10-31T13:52:54.533 に答える