1

BFS を使用してグラフ内のいくつかのパスを計算し、各ノードへの部分パスを計算しています。これは、実際の問題の概要にすぎません。

問題は、2 つのノードがあり、その間にリンクがあるとしましょう。それらはすべて 3 つのパラメーターを持ち、3 つの値のみを持つリストとしてモデル化されています。

ノード A までのパスの内容は listA にあり、リンク パラメータは listC に格納され、それらの両方を追加した結果は、ノード B の一部である listB に入ります。

たとえば、listA = [0,0,1] および listC = [1,1,1] です。次のように、リストにペアワイズ加算を行っています

listB[0] = listA[0] + listC[0]
listB[1] = listA[1] + listC[1]
listB[2] = listA[2] + listC[2]

したがって、操作の最後には listB = [1,1,2] となるはずです。私が知る限り、 listA はとにかく変更されるべきではありません。しかし、この操作を実行すると、listA がどの操作の LHS でもなくても、listA と listB は同じ値になります。ここで見逃している Python-y の概念はありますか? リストは元の形では不変だと思っていました。

4

1 に答える 1

1

おそらくlistB次のように初期化しています:

listB = listA

これは、2 つの変数が同じリスト オブジェクトを指すようにするだけです。一方を変異させると、もう一方も変異します。代わりにリストを複製します。

listB = list(listA)
listB = listA[:]  # Or
于 2013-08-17T07:29:53.447 に答える