2016-10-17 13 views
0
>>>s1 = 100 
>>>s2 = 100 
>>>s1 is s2 
True 
>>>b1 = 257 
>>>b2 = 257 
>>> 
>>>b11 = b12 = 257 
>>>b1 is b2 
False 
>>> 
>>>b11 is b12 
True 
>>> 

B1とB2はB11とB12に起こるどんな理由PyLongtObjectFalseで切り抜いたのpython3のですか? どうか私を助けてください。は同じではありません必要がありますが、それは

+0

多分、http://stackoverflow.com/questions/3718513/python-is-statement-what-is-happeningの複製 –

+0

またはhttp://stackoverflow.com/questions/132988/is-there-aの複製-ifif-between-in-python –

+0

soryちょっとした間違いをしました。 – jawahar

答えて

1

About the changing id of a Python immutable stringの(重複した)複製です。

REPLループの評価フェーズでは、値257の定数が1つだけメモリに作成されます。

compile("a = b = 257", '<stdin>', 'single').co_consts # (257, None) 

実行時に、同じオブジェクト(メモリ内の同じアドレスを持つ)が両方の名前に割り当てられます。

>>> dis.dis(compile("a = b = 257", '<stdin>', 'single')) 
    1   0 LOAD_CONST    0 (257) 
       3 DUP_TOP    
       4 STORE_NAME    0 (a) 
       7 STORE_NAME    1 (b) 
      10 LOAD_CONST    1 (None) 
      13 RETURN_VALUE   

両方の名前が同じオブジェクトを指し示すので、それらのオブジェクトにidしたがってis戻りTrue、同じ番号を返すことが期待されます。

+0

それは大きな問題になりますか? ???????? – jawahar

+0

エーム、何?これは実装の詳細な動作の説明であり、言語仕様によって保証されていません。常に等価で整数を比較し、決してアイデンティティではなく、あなたはうまくいく。コメントのために –

+0

thanq – jawahar

関連する問題