def mutation(input_list):
list_copy = input_list[:]
list_copy[0] = 10
input_list = list_copy
# Correctly mutates
sample_list = [0,1,2]
sample_copy = sample_list[:]
sample_copy[0] = 10
sample_list = sample_copy
print(sample_list)
# Incorrectly mutates
sample_list = [0,1,2]
mutation(sample_list)
print(sample_list)
コードの一番上のスニペットでは、リストのコピーを作成して修正しました。私はコピーにオリジナルを設定し、それが動作します。 私が混乱している理由は、関数の外でこのプロセスを行うのはなぜですか?しかし、関数(コードの2番目のスニペット)の中でそれを実行すると失敗します。参考のためコピー後のPythonリストの変異
、コードを返します:
[10, 1, 2]
[0, 1, 2]
編集:私はinput_list[0] = 10
作品を呼び出すことを知っています。私は、これを私が何よりも上に示したことと何が違うのかを知りたいだけです。
https://docs.python.org/3/faq/programming.html#how-do-i-write-a-function-with-output-parameters-call-by-referenceをご覧ください。 – randomir
非常にお勧めの読書:https://nedbatchelder.com/text/names.html。これはあなたに必要なすべての答えを与えるはずです。 – SethMMorton
[参照で変数を渡すにはどうすればいいですか?](0120-325-002) – randomir