私のプログラムに問題が発生しました。ここでは、メソッド内で使用されているすべてのものが、使用されているパラメータ変数に保存されています。メソッドは、変数を元のパラメータ変数に戻します。
ここでは、リストの要素を所定のスペースだけ左に移動するメソッドの例を示します。
def moveLeft (perm, pos, spaces):
permTemp = perm
for n in range(spaces):
charMoved = permTemp[pos-n]
permTemp [pos-n] = permTemp[pos-n-1]
permTemp[pos-n-1] = charMoved
return permTemp
permO = [0,1,2,3] #original perm
print moveLeft(permO, -1, 2)
print moveLeft(permO, -1, 2)
print permO
出力は次のようになり期待:(それはメソッドの同じ戻り値を印刷されているので)最初の二つは同じで、かつ最後の出力は、元のリストであること([0,1,2、 3])。 は、代わりに私が取得:
>>>
[0, 3, 1, 2]
[0, 2, 3, 1]
[0, 2, 3, 1]
素晴らしいことだ。つまり、今多くの意味があります!これは前にこの問題を経験したことがないので、Javaで何が起こるかは異なるはずです。 –
いいえ、Javaは同じことを行います。オブジェクトへの参照も使用するので、 'int [] arr = {1,2,3}; int [] arr2 = arr; arr2 [1] = -2; 'は元の配列を変更します。実際のコピーを作成する 'System.arrayCopy()'メソッドがあります。 – dimo414