pythonで16進数の値をリストに入れた際の挙動?

pythonで0xをつけると16進数の値を使うことができるよ!と聞いて使ってみたら思うようにいかなくて困った話。

まあ、考えてみたらそうなるのか?

こんな感じのコードを書いて

tmp_list = []
tmp_list.append(0xFFFF)
tmp_list.append(hex(128))
print(type(tmp_list[0]),tmp_list[0])
print(type(tmp_list[1]),tmp_list[1])

print(type(0xFFFF))

実行するとこうなる

python3 hex_test.py 
<class 'int'> 65535
<class 'str'> 0x80
<class 'int'>

知っている人から当然なのかもしれないけど、自分は「0xFFFFを一旦リストに入れておいて、もっかい取り出しても0xFFFFとして取り出せるだろ!」と思っていたのでうまくいかなかったよというお話。

実際には0xFFFFをそのままリストに入れると10進数として変換?されてint型として保存されるみたい。そしてhex関数を使うとstringとして16進数を保存できるみたい。

全く知らなかった とはいえ、0xFFFFは文字列を含んでいるしまあ、数値として扱うことができないからintに変換されているのかなと考えると当然なのか?とか思いつつ、自分みたいな全くの初心者は引っかかるかもしれないのでメモしておきました。