夜行録 - 酔歩.net

日暮れて道遠し さらに夜道を行く もって夜行録と名付く

python バグ

python で書いたコードを C++ で書き直したら、ごく微妙に結果が違うんで追及したら python のコードの方がバグってた。って捨てるコードだからバグっててももういいんだが…。

python はわりとなんでもリストにできる。で、プログラムの前半で処理した結果をリストに詰めといて、後半で読んで解析するというコードを書いたんだが、1個所だけ正しく詰められていなかった。何故か。

こういうリストを作った。 Numeric.Array の A、リストの B、スカラー変数の C からなる TMPLIST = [A, B, C]
これを、メインのリストに詰める。 ALLLIST.append(TMPLIST)

プログラム後半で、このALLLIST を分解しながら処理をするんだが、値が正しくなかったのは ALLLIST の最後のエントリの A の値。通常のリストと変数であるところの B, C はちゃんと正しい値になっているので判りやすかった。間違えている A の値は、一つ前のエントリの A と同じ値。 Numeric Array は python の本体のデータ構造じゃないのと、 python では変数はあらゆる参照になっているはずなので、その辺でちゃんとコピーされるイベントがなにかすっ飛んでるのかも。

しかし、こういう正しく書いたつもりでもバグっていることもある、ってことがあると大事なとこでは python 使いにくいな

2008年03月01日 (Sat) - 23:39:48 - その他雑記 - 3314x - permalink
Karma points: 1. Do you like this article? [yes/no]