在下面的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 –