2017-02-18 3 views
-3

私が作っていたことにこの問題が気づき、より単純な形でそれを再現することができました。Python - 2つのクラスの変数がリンクされています

問題は、私はPersonクラスの2人のプレーヤーがあり、それぞれに独自のグリッドがあることです。私はグローバルなグリッド変数から始め、各グローバルグリッドに各Personのグリッドを割り当てます。しかし、1人のグリッドを変更すると、もう1人のグリッドも変更されます。ここで

は、コードと出力です:

Code image

誰もがこの問題が発生した理由として何か提案がありますか?

編集:

私はリスト()の提案を試しました。これは1つのプログラムで機能しましたが、私のメインプログラムでは何もしませんでした。

Players[1].Grid = list(Grid) 

Players[0].Grid = list(Grid) 

これは、リストを変更したときと同じことを出力します。

+2

テキストをテキストとして表示します。テキストは表示しません。 – melpomene

答えて

0

が、コードはここで私はこの問題は、実際にはむしろ、試料中の1次元のものよりも、2次元のリストを使用しました。

私は、より複雑なオブジェクトが古い変数への参照のみされることなく、すべてをコピーする

copy.deepcopy 

を必要とするhereから見出しました。

0

両方のオブジェクト間でグリッドを共有しているので、変更すると両方のオブジェクトが表示されます。それぞれのコピーが必要な場合は、list()を使用してそのコピーを作成します。 Scovettaの答えは、私が提供した例のために仕事をした

People[a].grid = list(Grid) 
+0

私はちょうどそれが動作しない何かを見つけました – Woafer

+0

@Woaferと合意すると、複雑なオブジェクトには 'deepcopy'が必要です。 – Scovetta

関連する問題