可能重复:
Python"is"运算符使用整数意外运行
今天我试着调试我的项目,经过几个小时的分析,我得到了这个:
>>> (0-6) is -6
False
Run Code Online (Sandbox Code Playgroud)
但,
>>> (0-5) is -5
True
Run Code Online (Sandbox Code Playgroud)
你能解释一下,为什么?也许这是某种错误或非常奇怪的行为.
> Python 2.7.3 (default, Apr 24 2012, 00:00:54) [GCC 4.7.0 20120414 (prerelease)] on linux2
>>> type(0-6)
<type 'int'>
>>> type(-6)
<type 'int'>
>>> type((0-6) is -6)
<type 'bool'>
>>>
Run Code Online (Sandbox Code Playgroud) 看完这个和这个,这是非常相似,我的问题,我仍然无法理解以下行为:
a = 257
b = 257
print(a is b) #False
a, b = 257, 257
print(a is b) #True
Run Code Online (Sandbox Code Playgroud)
打印时id(a),id(b)我可以看到在单独的行中分配值的变量具有不同的ID,而对于多个赋值,两个值具有相同的id:
a = 257
b = 257
print(id(a)) #139828809414512
print(id(b)) #139828809414224
a, b = 257, 257
print(id(a)) #139828809414416
print(id(b)) #139828809414416
Run Code Online (Sandbox Code Playgroud)
但是,通过说多个相同值的赋值总是创建指向同一个id的指针,从而解释这种行为是不可能的:
a, b = -1000, -1000
print(id(a)) #139828809414448
print(id(b)) #139828809414288
Run Code Online (Sandbox Code Playgroud)
是否有一个明确的规则,它解释了变量何时变得相同id而不是?
编辑
相关信息:此问题中的代码以交互模式运行(ipython3)