オブジェクトが同一かどうかの比較
比較演算子ではオブジェクトが持つ値の比較を行いました。値が同じであればオブジェクトそのものは別のものでも構わなかったのですが、今度はオブジェクトが同じオブジェクトなのかどうかを比較してみます。
オブジェクトが同一かどうかを調べるいは「is」演算子を使います。
左辺 is 右辺
左辺と右辺のオブジェクトが同じオブジェクトだった場合には「True」を返します。
例えば次のように記述します。
str1 = "ABC" str2 = "ABC" print str1 == str2 print str1 is str2
変数「str1」と変数「str2」はオブジェクトが持つ値は同じでも、参照しているオブジェクトは別々のものです。結果的に「str1 == str2」はオブジェクトが持つ値を比較するだけなので「True」を返しますが、「str1 is str2」ではオブジェクトが異なるので「False」を返します。
str1 = "ABC" str2 = str1 print str1 == str2 print str1 is str2
今度は変数「str2」には変数「str1」が代入されています。よって変数「str1」と変数「str2」は同じオブジェクトを参照することになります。この時は「str1 == str2」も「str1 is num2」も「str2」を返します。
なおオブジェクトが同一ではないことを調べるいは「is not」演算子を使います。
左辺 is not 右辺
左辺と右辺のオブジェクトが別のオブジェクトだった場合には「True」を返します。
では実際に試してみます。
#coding: UTF-8 num1 = 10 num2 = 10 print "num1 == num2", num1 == num2 print "num1 is num2", num1 is num2 name1 = "Hello, Yamashita.How are you doing?" name2 = "Hello, Yamashita.How are you doing?" print "name1 == name2", name1 == name2 print "name1 is name2", name1 is name2 list1 = [1, 2, 3] list2 = [1, 2, 3] print "list1 == list2", list1 == list2 print "list1 is list2", list1 is list2 list1 = [1, 2, 3] list2 = list1 print "list1 == list2", list1 == list2 print "list1 is list2", list1 is list2
上記を「test5-1.py」として保存します。保存する時の文字コードはUTF-8です。そして次のように実行して下さい。
( Written by Tatsuo Ikura )