Pythonには'is'と'=='でObjectが同じかどうかを比べるOperatorがあります。
たまたまに実際どんな違いがあるの?と思いませんか?
今回はこの子たちのこと少しみよう。では、まず英語からこの2つの意味をみてみしょう。
- '=='はEqualityをチェックする、つまり2つの値が同じかどうかをチェックするのです。
- 'is'はIdentityをチェックする、つまり2つのもの完全メモリ上で完全に同じなObjectである。
それでも思いつかないのね。では少しScriptを書きながらを考えましょう。
いま机の上に2つの飲み物があります。ここでビールとお茶にしましょう。
簡単な質問、ビールとお茶は同じですか?答えはもちろんFalseです。
print('beer'=='tea')#False
では今度机の上にビールが2つおいておきました。
この2つの飲み物もビールですか?もちろんTrueです。
print('beer'=='beer')#True
これだけの比べは足りるでしょうか?それはあなたのプログラムによりますね。机の上にある2つのビール、一つは朝日スーパードライ。もう一つは一番搾り。それでも”同じ”に言えるかどうかはあなた次第です。
今度は2つのリストを作ります。l1とl2は違う値が入っています。それならもちろんFalseです。
l1=[1,2,3,4,5]
l2=[1,2,4,5]
print(l1==l2)#False
今度は同じの値が入ってるリストを2つ作ります。あれ?'is'で比較するとFalseになり'=='で比較するとTrueになりましたね。
最初にに言ったが'=='は2つの値が同じかどうかをチエックするのでTrueです。
そして'is'は2つのリストは違うObjectなのでFalseになります。
だから?もしあなたが2つのObjectが同じかどうかを知りたいなら、'is'を使えましょう。
l3=[1,2,3,4,5]
l4=[1,2,3,4,5]
print(l3==l4)#True
print(l3 is l4)#False
いまなら返す結果はTrueになります。だってl6はl5と同じだもん。
l5=[1,2,3,4,5]
l6=l5
print(l5 is l6)#True
念の為にちょっとチエックしましょうか。l8とl7を作って、そしてl7の1個目の値を変えてみましょう。
うん、同じだねーそれはどんな意味をもっているでしょうか?つまり2つのリストが同じのアドレスを指しててどっちかを変更しても別のObjectの変わることです。
l7=[1,2,3,4,5]
l8=l7
l7[0]=6
print(l7)
print(l8)
#[6, 2, 3, 4, 5]
#[6, 2, 3, 4, 5]
最後、2つのObjectのアドレスから見てみましょう。同じですね。
l9=[1,2,3,4,5]
l10=l9
print(id(l9))#4306980040
print(id(l10))#4306980040
print(id(l9)==id(l10))#True