>>>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上发生了什么?
任何想法请帮助我。
答案 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
。