リストの中身を倍にして、毎回同じ値を返すようにする
auです。
今日は、久しぶりにPythonに触れてみました。twice変数がいくつ呼び出されても、毎回2倍になるようにするのが目標です。
def twice (n): for i in range(0, len(n)): n[i] *= 2 return n num = [3, 4, 6] print(twice(num)) print(twice(num)) # 実行結果 [6, 8, 12] [12, 16, 24]
うーん、これだと1度2倍になって、もう一度呼び出した時に値が保持されたままで、自分の思っているような結果が返ってこない…
そこで、変数tmpを用意して、そこにnumの値を代入しようと考えました。
def twice (n): tmp = n for i in range(0, len(n)): tmp[i] *= 2 return tmp num = [3, 4, 6] print(twice(num)) print(twice(num)) # 実行結果 [6, 8, 12] [12, 16, 24]
だめやんけ…
どうやらPythonだと、代入した変数の値を変更した際に、元の変数の値も書き換わってしまうようです。
C言語ならreturnで返した際に、その関数の変数がなくなるこんなことないのになぁ
対策
結局色々調べた結果、copyモジュールのcopy関数を使うのがいいのかなと思いました。
import copy def twice (n): tmp = copy.copy(n) for i in range(0, len(tmp)): tmp[i] *= 2 return tmp num = [3, 4, 6] print(twice(num)) print(twice(num)) # 実行結果 [6, 8, 12] [6, 8, 12]
ついに理想の値が返ってきました!