a = 300 b = 300 print(a is b) print(a == b)
如上代碼在pycharm和python控制檯下分別運行,pycharm顯示都是True, 控制檯打印第一條爲Ture,第二條爲Falsepython
"is"是身份運算符,判斷兩個對象內存地址是否相同,內存地址爲對象的惟一身份標識,內存地址相同即爲同一個對象,比較時使用內置函數id()緩存
"=="是比較運算符,比較兩個對象的內容是否相同,在python中[-5,256]爲小整數,超過256爲大整數,因此上述代碼纔會判斷兩個對象內容相同可是內存地址不一樣函數
打印內存地址能夠看出不是同一對象code
>>> print(id(a)) 2297199632176 >>> print(id(b)) 2297202001072
控制檯每次回車鍵都是運行了一次,pycharm全部的代碼是先加載到內存中在運行,是一個總體,即同一個代碼塊的大整數對象爲同一個對象對象
class Test1: a = -4 b = -4 c = 400 e = 400 d = -1234 class Test2: a = -4 c = 400 d = -1234 t1 = Test1() t2 = Test2() print(t1.a is t1.b) # True # 同一個代碼塊中的相同小整數爲同一對象 print(t1.c is t1.e) # True # 同一個代碼塊中的相同大整數爲同一對象 print(t1.a is t2.a) # True # 不一樣兩個代碼塊中的相同小整數爲同一對象 print(t1.c is t2.c) # False # 不一樣兩個代碼塊中的相同大整數內容相同,不是同一對象 print(t1.d is t2.d)
python全部的內建對象,都有本身特有的緩衝機制內存
python設置[-5,256]爲小整數範圍,將小整數範圍的數緩存在小整數對象池中,在這個範圍內的相同整數同爲一個對象pycharm
>>> c = 256 >>> d = 256 >>> print(id(c)) 1424269392 >>> print(id(d)) 1424269392 >>> print(c is d) True >>> print(c==d) True
超出小整數範圍的即爲大整數class