文字列の比較で疑問(4)
西尾さんに質問したら丁寧に解説してくれた。
Pythonで2つの文字列がa == bだけどもnot(a is b)であるようなケース
質問するに当たって確認された事は、対話的環境を使用したかどうか。答えはyes。というわけで試してみた。
- 対話型インタプリタとの会話
d1 = 'a a' # => ここでコンパイル d2 = 'a a' # => ここでコンパイル id(d1) # => 28265248 id(d2) # => 28265440 'yes' if d1 == d2 else 'no' # => ここでコンパイル # => 'yes' 'yes' if d1 is d2 else 'no' # => ここでコンパイル # => 'no' d3 = 'abc' # => ここでコンパイル d4 = 'abc' # => ここでコンパイル id(d3) # => 28462080 id(d4) # => 28462080 'yes' if d3 == d4 else 'no' # => ここでコンパイル # => 'yes' 'yes' if d3 is d4 else 'no' # => ここでコンパイル # => 'yes'
- ファイル text.py を作って実行
# -*- encode: utf-8 -*- d1 = 'a a' d2 = 'a a' print id(d1) print id(d2) print 'yes1' if d1 == d2 else 'no1' print 'yes2' if d1 is d2 else 'no2' d3 = 'abc' d4 = 'abc' print id(d3) print id(d4) print 'yes3' if d3 == d4 else 'no3' print 'yes4' if d3 is d4 else 'no4' # => ここでコンパイル # => 26753760 # => 26753760 # => 'yes1' # => 'yes2' # => 26754016 # => 26754016 # => 'yes3' # => 'yes4'
また一つ理解が深まった気がするよ!