在下面的python脚本中,为什么第二个断言会通过(即,将0添加到257并将结果存储在y中,那么x和y会变成不同的对象)?谢谢!Python整数高速缓存
x = 257
y = 257
assert x is y
x = 257
y = 257 + 0
assert x is not y
在下面的python脚本中,为什么第二个断言会通过(即,将0添加到257并将结果存储在y中,那么x和y会变成不同的对象)?谢谢!Python整数高速缓存
x = 257
y = 257
assert x is y
x = 257
y = 257 + 0
assert x is not y
整数都是非可变的,因此任何操作来改变它们产生新的存储位置
>>> a =9876
>>> id(a)
38478552
>>> a+=1
>>> id(a)
38478576
>>> a+=0
>>> id(a)
38478528
is
被检查对象的实际存储位置......而且应该基本上都不来检查值是否相等(尽管它可以任意处理一些小的子集)
当您使用is
,要检查两个对象是否指向同一个内存位置。如果他们这样做,那么结果是真的。否则,结果是False。
要检查这些值是否相等,请使用==
,例如, assert x == y
。 或者,要声明它们不相等,请使用!=
,例如, assert x != y
。
x = 257
y = 257
>>> id(x)
4576991320
>>> id(y)
4542900688
>>> x is y
False
x = 257
y = 257 + 0
>>> id(x)
4576991368
>>> id(y)
4576991536
不使用'is'来检查是否相等...基本上是...它是通过内存位置变量... python prestores少量常量将会ju st在某些情况下正常工作... –
检查此答案;它解释了为什么'是'似乎有时奇怪地工作! http://stackoverflow.com/questions/132988/is-there-a-difference-between-and-is-in-python –