2
def swap(array, i):
array[i], array[(i+1)%len(array)] = array[(i+1)%len(array)], array[i]
return array
なぜ私のスワップ機能がスワップするのですか? 私はスワップ関数 'array'はローカル変数であり、ローカル変数の要素を入れ替えて 'array'を返すと、なぜリストに変更が加えられたのですか? たとえば、リストa = [1,2,3,4]
を呼び出した後にswap(a,0)
を呼び出すと、[2,1,3,4]
が返されますが、リスト 'a'が変更されています。私のスワップ機能の交換がなぜ適切なのですか?
リストが変更可能であるためです。 'array'をリストとして渡して、スワップを実行して、その場で変更します。 – Wondercricket
[参照によって変数を渡す方法は?](https://stackoverflow.com/questions/986006/how- do-i-pass-a-reference-by-reference)(問題の完全な説明については、受け入れられた回答を参照してください) – jadsq
リストはメモリロケーションへのポインタです。コピー操作を実行する必要があります。または、関数スペースに関係なく、同じメモリチャンクで動作します。list_copy = original_list [:] – Sebastian