カラノウ (身体は脳みその乗り物): イチゴジャム & ただのコピーはダメ

2020/04/18

イチゴジャム & ただのコピーはダメ

無人販売でイチゴをゲット.ジャムに姿を変えた.
家人によって,開けるのが面倒なジャーに入れら
れてしまった.食べ過ぎ防止である.不自由を強
いられている.














コーディングはバグとの戦いである.一応,計算
はできるが,時々あり得ない答えを返してくれる.
ここで勘違いしてはいけない.これはコードが悪
いのではなく,小生が与えた命令が悪いのだ.コ
ードはすこぶる実直なのだから.

今回おったまげたのはPythonのリストのコピーで
ある.人間感覚上の論理的には問題ないが,予想
外の結果をもたらした.この子のおかげで,悩み
に悩んだ1日を過ごす羽目に.失敗する度に学びを
得る.

今回の学びを具体的に述べると次のとおりである.
下に示すように,リストAをリストBにイコールで
コピーして,リストBの先頭の要素を10に変更する
としよう.結果,コピー元Aの要素も意図せず変わ
ってしまうのだ.
詳細は"copy.copy(), copy.deepcopy()"でググって
いただきたい.
今回は"A = copy.copy(B)"とするのが正解であった.
もちろん,あらかじめ"import copy"として,copy
モジュールをインポートしておく.

ソースコード (Before)
A = [1, 2, 3]
B = A
B[0] = 10
print(A)
print(B)

実行
[10, 2, 3]
[10, 2, 3]
-----------------------
ソースコード (After)
import copy
A = [1, 2, 3]
B = copy.copy(A)
B[0] = 10
print(A)
print(B)

実行
[1, 2, 3]
[10, 2, 3]