①引数に設定したリストの要素を全部2倍にする関数を作ります。
if文でその関数を用いたいですが、引数にしたリストはそのままにしたいのです。
具体例をあげます。
Python
1a = [1,2,3] 2 3def twice(ls): #リストの要素を全部2倍にする関数 4 for i in range(len(ls)): 5 ls[i]=2*ls[i] 6 return ls 7 8if twice(a)==[2,4,6]: 9 print("OK") 10 11print("a =",a)
【期待する出力】
OK a = [1,2,3]
【結果】
OK a = [2,4,6]
リストaが2倍になってしまいました。aは[1,2,3]のままでいてほしいのです。後でまた使うので。
確かにif文でtwiceをaに使いました。しかしこれは「仮にaにtwiceを適用したら...」の意味ではないのでしょうか。
実際にはaは2倍にならないという認識でした。どこが間違っているのか教えてください。
②コードが不細工になることを承知でaを別の場所に退避させるようにコードを変えました。
Python
1a = [1,2,3] 2original_a = a #aを別の変数に逃がした 3 4def twice(ls): 5 for i in range(len(ls)): 6 ls[i]=2*ls[i] 7 return ls 8 9if twice(a)==[2,4,6]: 10 print("OK") 11 12a = original_a #上で逃がしたaを呼び戻した 13print("a =",a) 14print("original_a"=original_a)
【結果】
OK a = [2, 4, 6] original_a = [2, 4, 6]
やっぱりaはtwiceされました。なんならoriginal_aも2倍にされました。
どこでoriginal_aにtwiceがかかったのでしょう...?コード内でoriginal_aには何も変更を加えていないはずです。
【教えてほしいことまとめ】
①で、期待する出力を出す方法
②で、original_aが2倍にされた理由
宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/26 14:09
2018/05/26 14:18
2018/05/26 14:29 編集
2018/05/26 14:30