1. ホーム
  2. python

コピーされた変数がオリジナルを変える?

2023-10-24 10:11:11

質問

Pythonで簡単な問題があるのですが、とてもとても不思議です。

def estExt(matriz,erro):
    # (1) Determinar o vector X das soluções
    print ("Matrix after:");
    print(matriz);

    aux=matriz;
    x=solucoes(aux); # IF aux is a copy of matrix, why the matrix is changed??

    print ("Matrix before: ");
    print(matriz)

...

以下のように、行列の matriz が変更されているにもかかわらず aux は関数 solucoes() .

マトリックス前。

[[7, 8, 9, 24], [8, 9, 10, 27], [9, 10, 8, 27]]

マトリックス後。

[[7, 8, 9, 24], [0.0, -0.14285714285714235, -0.2857142857142847, -0.42857142857142705], [0.0, 0.0, -3.0, -3.0000000000000018]]

どのように解決するのですか?

ライン

aux=matriz;

のコピーを作成しない。 matriz への新しい参照を作成するだけです。 matriz という名前の aux . おそらく

aux=matriz[:]

とすると、コピーを作成します。 matriz は単純なデータ構造であると仮定します。 もしもっと複雑なものであれば、おそらく copy.deepcopy

aux = copy.deepcopy(matriz)

余談ですが、各ステートメントの後にセミコロンは不要です。pythonはセミコロンをEOLマーカーとして使いません。