0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[python] == と isの違い

Last updated at Posted at 2023-05-16

pythonのif文を記述するときに、
「==」と「is」といった似たような演算子があることに気づくと思う。
今回は、それぞれの違いを具体例をまじえながら記述する。

== と isの違い

== 演算子

→2つのオブジェクトのを比較する演算子。

記載の通り、値を比較する演算子。
いくつかの組み込みの数値型 (数値型 int, float, complex) など異なる型同士を比較できる

6.10.1. 値の比較
演算子 <, >, ==, >=, <=, および != は2つのオブジェクトの値を比較します。 オブジェクトが同じ型を持つ必要はりません。

公式Python リファレンス:値の比較

is 演算子

→2つのオブジェクトの同一性を比較する演算子。

  • 同一性とは
    メモリ上に作成されたオブジェクトに対して、ユニークなアドレスのようなものが割り当てられる性質のこと。
    なので、上記の同一性の比較とは、オブジェクト作成時に割り当てられたIDが同じかどうかを調べるということになる。同じオブジェクトを指していれば同じIDになる。

6.10.3. 同一性の比較
演算子 is および is not は、オブジェクトの同一性に対するテストを行います: x is y は、 x と y が同じオブジェクトを指すとき、かつそのときに限り真になります。 オブジェクトの同一性は id() 関数を使って判定されます。 x is not y は is の真値を反転したものになります。

公式Python リファレンス:同一性の比較

具体例

==演算子

==はオブジェクト同士が等価であるかを判定する演算子なので、
以下のように値が同じかを調べたいときに使用する。

(例1): 同一の型同士(整数型)

num_1 = 1
num_2 = 1

# 値が等しいかをチェックする
if num_1 == num_2:
  print('num_1とnum_2は同じ値です')

実行結果

num_1とnum_2は同じ値です

(例2): 違う型を持つオブジェクト同士の比較

# int型
num_1 = 1
# float型
num_2 = 1.0

# 値が等しいかをチェックする
if num_1 == num_2:
  print('num_1とnum_2は同じ値です')

実行結果

num_1とnum_2は同じ値です

前述した通り、数値型 (数値型 int, float, complex)などという条件付きで
型が同じではなくても、値が同じであれば条件式はTrueを返す。

(例3): 違う型(整数型と文字列型)持つオブジェクト同士の比較

# int型
num_1 = 1
# string型
num_2 = '1'

# 値が等しいかをチェックする
if num_1 == num_2:
  print('num_1とnum_2は同じ値です')

実行結果

# 何も表示されない(つまりFalse)

数値型と文字列型は比較してもFalseと判定されるため注意が必要。

is演算子

isはオブジェクト同士が同じオブジェクトであるか(同一)を判定するときに使う。

(例1): 同じ値を持つリスト

list_1 = [1, 2, 3]
list_2 = [1, 2, 3]

# オブジェクトが等しいかをチェックする
if list_1 is list_2:
  print('list_1とlist_2は同じオブジェクトです')
else:
  print('list_1とlist_2は同じオブジェクトじゃない')

実行結果

list_1とlist_2は同じオブジェクトじゃない

値は同じでも、オブジェクトは同じではない(=メモリ上では同じIDで管理されていない)ため、Falseとなる。

(例2): オブジェクトがNoneか否か

list_1 = None

# オブジェクトがNoneかをチェックする
if list_1 is None:
  print('list_1はNoneです')
else:
  print('list_1はNoneじゃない')

実行結果

list_1はNoneです

(例3): 再代入されたオブジェクト

list_1 = [1, 2, 3]
list_2 = list_1

# オブジェクトが等しいかをチェックする
if list_1 is list_2:
  print('list_1とlist_2は同じオブジェクトです')
else:
  print('list_1とlist_2は同じオブジェクトじゃない')

実行結果

list_1とlist_2は同じオブジェクトです

pythonでは、リストや辞書はオブジェクトの参照渡しのため、
メモリ上list_1 と list_2は同じオブジェクトとして扱われるため。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?