0

元のオブジェクトの完全なコピーを作成しようとして Python ディープ コピーを使用していましたが、ディープ コピーはコピーを作成していないようでした。元のオブジェクトと同じ参照を共有していますが、これは望ましくありません。

これがコードです。を持っておりclass Board、そのインスタンスをディープ コピーします。

import copy
class Board:
    xpos = None
    opos = None
    count = None
    status = []

    def __init__(self, size):
        self.xpos=[0,0]
        self.opos=[size-1,size-1]
        self.count = size*size-2
        for i in range(size):
            tmp = ['-']*size
            self.status.append(tmp)
        self.status[0][0] = 'X'
        self.status[size-1][size-1]= 'O'

別の関数のどこかで呼び出したい

board=Board()
localboard=copy.deepcopy(board)
# then do modification to local board....
# but it seems the old board is also affected. This is so weird since
# I am already using deep copy. 

では、古いボードのディープ コピーを作成するにはどうすればよいでしょうか。ローカルのものを変更し、古いものをそのまま維持したいので、参照を共有したくありません..

4

1 に答える 1

1

Board以下を定義から削除する必要があります。

xpos = None
opos = None
count = None
status = []

その に以下を追加します__init__()

self.status = []

それ以外の場合、すべてのインスタンスは、インスタンスではなくクラスstatusの属性である同じを共有します。

于 2013-03-23T15:52:08.603 に答える