こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

演算子is... 初学者 Python 3

毎度おせわさまです。Pythonに関する質問です。

今回は演算子isについて。

ネット上の初心者むけサイトで独学に励んでいるのですが、演算子isは、左辺と右辺のオブジェクトが同じオブジェクトだった場合には「True」を返します、とありました。
変数を、

str1 = "555"
str2 = "555"

として、

print str1 == str21 #1
print str1 is str2 #2

とすると
#1は、オブジェクトの値が同じなのでTrueを返すが、#2はオブジェクトが同一ではないのでFalseを返す、と。

なるほど、なるほど。と思いながら実際に書いてみると、#1も#2もTrueを返すのですが・・・・・

バージョンの違いでしょうか?なんでしょうか???今使ているのはPython2.7です。
ご回答よろしくお願いいたします。

投稿日時 - 2014-04-07 01:27:39

QNo.8544818

困ってます

質問者が選んだベストアンサー

間違い、とも言えません。
手許のPython 2.7.6で、会話モードから
id("555")
を繰り返すと、違う値になることがあります。
「"555"と書いたら常に同じオブジェクト」と保証されているわけはない、ということでしょう
# 公式資料が提示できればいいのですが...ちょっと見つからなくて


#2はオブジェクトが同一ではない「場合がある」のでFalseを返す「ことがある」


くらいに考えてはどうでしょうか?

投稿日時 - 2014-04-07 22:58:19

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

どこに書いてあったか忘れてしまいましたが

Pythonでは、同じ文字列リテラルに同じオブジェクトを再利用することがあります。

今回の場合、内部では
str555= "555"
str1 = str555
str2 = str555
のように動作しています。
str1 = "555"
str2 = "5"+"55"
等とすれば、 ==とisで違いが出ると思います。
また、
t1=(1,2)
t2=(1,2)
とタプルやリストを使っても違いが出ます。


なお、数値型では a==bならa is bだったはずです。
is で比較される「識別値」は、組み込み関数 id で求められます。

投稿日時 - 2014-04-07 03:49:50

補足

確かにそうなりました!ありがとうございます。
・・・ということは今回参照したネットの情報が間違いだということでしょうか??

投稿日時 - 2014-04-07 16:03:20

あなたにオススメの質問