ベスパライフ

日記・備忘録。ベスパもってないです。

python3で文字列にlower()するとidが変わるという当たり前の話

文字列比較は is ではなくて == で比較しましょう、という話です。

>>> a = "hoge"
>>> b = 'hoge'
>>> a is b
True
>>> a.lower()
'hoge'
>>> a.lower() is b
False
>>> a.lower() is a
False

…なぜ?
どうやらlower()やupper()したらidが変わってしまう様子。

>>> id(a)
1991375392
>>> id(a.lower())
1991375808
>>> id(a.lower())
1991375744        # やるたびに変わる

知りませんでした。
idはオブジェクト固有のIDなので、lower()メソッドが返す文字列が元のオブジェクトとは限らないというのは当たり前といえば当たり前の話。
そういうわけで文字列比較は == で評価しましょう。