なぜ、文字列を比較する際に ‘==’ または ‘is’ を使用すると、時々異なる結果が得られるのか?

PYTHON3 チュートリアル

‘==’ と ‘is’ の違いの理解

Pythonにおける文字列の比較には、主に ‘==’ と ‘is’ の二つの演算子が使用されますが、これらは異なる比較を行います。

‘==’ 演算子

‘==’ は二つのオブジェクトの値が等しいかどうかを比較します。つまり、内容が同じであれば、異なるオブジェクトであっても真 (True) を返します。

‘is’ 演算子

‘is’ は二つのオブジェクトの同一性を比較します。これは、両オブジェクトがメモリ上で同じ場所に存在するかどうかを確認するため、完全に同一のオブジェクトでなければなりません。そのため、’is’ で比較した場合、たとえ内容が同じであっても、オブジェクトが異なる場合には偽 (False) を返します。

サンプルコード1: ‘==’ の使用例

# 文字列の比較を '==' で行う例
str1 = "Hello"
str2 = "Hello"
print(str1 == str2)  # Trueが出力される

サンプルコード2: ‘is’ の使用例

# 文字列の比較を 'is' で行う例
str1 = "Hello"
str2 = "Hello"
print(str1 is str2)  # Trueが出力されるが、これはPythonがメモリ効率化のため同じ文字列リテラルを再利用しているからです

サンプルコード3: ‘is’ と ‘==’ の違いの例

# 文字列を明示的に異なるオブジェクトとして生成
str1 = "Hello"
str2 = str("Hello")  # str() コンストラクタを使って新しい文字列オブジェクトを生成
print(str1 == str2)  # True - 値が同じ
print(str1 is str2)  # False - 異なるオブジェクト

解決策

文字列を比較する際は、通常 ‘==’ を使用して値が同じかどうかをチェックすべきです。’is’ はオブジェクトの同一性をチェックする場合に限定して使用し、特に意図的に同一のインスタンスであることを確認したい場合に利用します。

購読
通知
0 Comments
Inline Feedbacks
View all comments