比较两个大的int必须不一样,但它是不同的python3

时间:2016-10-17 17:20:38

标签: python oop int

>>>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是False因为PyLongtObject在b11和b12上发生了什么? 任何想法请帮助我。

1 个答案:

答案 0 :(得分:1)

它是About the changing id of a Python immutable string的(错综复杂的)副本。

在REPL循环的评估阶段,只在内存中创建一个值为257的常量。

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