うすけんです。
今回はオブジェクトが同一か判断するプログラムである==とisの違いについて一緒に学んでいきましょう。
is演算子と==演算子の違い
x is y x と y が同じオブジェクトの場合は True x not is y x と y が別のオブジェクトの場合は True
a=20
b=20
a==b true
a is b true
同じオブジェクトなのでリストにすると少し変わる。
a=[1,2,3]
b=[1,2,3]
a==b true
a is b false
リストの場合は各要素が同じデータ型で同じ値を持っている場合は True となるためです。それに対して is 演算子では False となります。値は同じでもオブジェクトはそれぞれ別々だからです。
https://www.javadrive.jp/python/if/index5.html
文字列の場合
>>> str1 = "うすけん" >>> str2 = "うすけん" >>> str1 == str2 True >>> str1 is str2 True >>>
オブジェクトには一度作成したあとで変更することができるもの( mutable といいます)と、一度作成すると変更できないもの( immutable )があります。数値や文字列、タプルは変更できないオブジェクトです。リストや辞書は変更できるオブジェクトです。
https://www.javadrive.jp/python/if/index5.html
id関数を使用しての比較
>>> list1 = [1, 2, 3] >>> list2 = [1, 2, 3] >>> id(list1) 2621838287560 >>> id(list2) 2621838778312 >>>
やはり別々なリストということが分かる。
>>> list1 = [1, 2, 3] >>> list2 = list1 >>> id(list1) 2621839912264 >>> id(list2) 2621839912264 >>>
代入の場合は同じになる
>>> num1 = 10 >>> num2 = 10 >>> id(num1) 140732009243568 >>> id(num2) 140732009243568 >>>
数値や文字列などの immutable オブジェクトの場合は既に同じ値を持つオブジェクトが存在した場合は同じオブジェクトを参照する場合があることが id 関数を使っても確認することができました。
ありがとうございました。
コメント