解決済み

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

  • 困ってます
  • 質問No.8544818
  • 閲覧数91
  • ありがとう数0
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 40% (26/64)

毎度おせわさまです。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です。
ご回答よろしくお願いいたします。

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

  • 回答No.2

ベストアンサー率 55% (1857/3366)

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


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


くらいに考えてはどうでしょうか?
たいせつな将来のこと。あえて、知らない人に聞いてみよう。

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 55% (1857/3366)

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

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 で求められます。
補足コメント
0603104

お礼率 40% (26/64)

確かにそうなりました!ありがとうございます。
・・・ということは今回参照したネットの情報が間違いだということでしょうか??
投稿日時 - 2014-04-07 16:03:20
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


OKWAVE若者応援スペシャル企画

ピックアップ

ページ先頭へ