2016-07-05 174 views
4

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

不使用'is'來檢查是否相等...基本上是...它是通過內存位置變量... python prestores少量常量將會ju st在某些情況下正常工作... –

+0

檢查此答案;它解釋了爲什麼'是'似乎有時奇怪地工作! http://stackoverflow.com/questions/132988/is-there-a-difference-between-and-is-in-python –

回答

1

整數都是非可變的,因此任何操作來改變它們產生新的存儲位置

>>> a =9876 
>>> id(a) 
38478552 
>>> a+=1 
>>> id(a) 
38478576 
>>> a+=0 
>>> id(a) 
38478528 

is被檢查對象的實際存儲位置......而且應該基本上都不來檢查值是否相等(儘管它可以任意處理一些小的子集)

1

當您使用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