0

私は本当に奇妙な問題を抱えています。サンプルコードは次のとおりです。

class SomeClass(object):
    a = []
    b = []
    def __init__(self, *args, **kwargs):
        self.a = [(1,2), (3,4)]
        self.b = self.a
        self.a.append((5,6))
        print self.b

SomeClass()

[(1, 2), (3, 4), (5, 6)] を出力しますが、なぜ結果が [(1,2), (3,4)] ではないのですか? self.a の古い値を self.b に入れる方法を知っていますか?

ありがとうございました!

4

5 に答える 5

2

self.b = self.aリストをコピーしていません。そのリストへの参照を割り当てているため、両方の属性が同じオブジェクトを指しています。1 つの参照を介して変更すると、別の参照を介しても変更が表示されます。

を使用copy.copy(the_list)して適切なコピーを取得できます。またはcopy.deepcopy(the_list)、以下の参照も更新する必要がある場合。

于 2013-06-26T09:31:15.627 に答える
1

self.aself.bは実際には同じリスト オブジェクトへの参照であるためです。

もう一方を変更せずに一方を変更する場合は、これを試してください

クラス SomeClass(オブジェクト):
    # a = []
    # b = [] # このコードではこれら 2 つのクラス メンバーは必要ありません
    def __init__(self, *args, **kwargs):
        self.a = [(1,2), (3,4)]
        self.b = list(self.a) # 新しいリストにコピー
        self.a.append((5,6))
        自分自身を印刷.b

SomeClass()
于 2013-06-26T09:32:29.933 に答える