【问题标题】:Comparing of two big int must not same but it is diffrent python3两个大整数的比较不能相同,但它是不同的python3
【发布时间】:2016-10-17 17:20:37
【问题描述】:
>>>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 上会发生什么? 任何想法请帮助我。

【问题讨论】:

标签: python oop int


【解决方案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

【讨论】:

  • 嗯,什么?这只是对实现细节的行为的解释,并且不受语言规范的保证。始终按相等比较整数,而不是按恒等式比较整数。
  • 感谢评论
猜你喜欢
  • 1970-01-01
  • 2019-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多