文字列の比較で疑問(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'

また一つ理解が深まった気がするよ!