>>>a=10.0>>>b=10.0>>>a is bFalse為什么當a=10,b=10時,a is b輸出的是True呢?
>>>a=10.0
>>>b=10.0
>>>a is b
False
為什么當a=10,b=10時,a is b 輸出的是True呢?
a is b
比較的是變量a與變量b的內存地址是否相同,即
id(a)==id(b)
Python的內置函數id就是用來查看變量地址的
id(a)等於id(b)說明變量a和變量b指向的是同一個內存空間。
Python中整數、浮點數都是immutable,也就是創建以后不能改變內存空間的值,對變量重新賦值以后,相當於變量重新指向了另外一處內存空間。
a = 10
print id(a)
a = a + 1
print id(a) #id(a)的值會反生變化
這樣,多個變量指向相同的內存空間就不會有影響,反而節省了內存的占用。
然而具體是否相同值的變量就占有相同內存空間,完全有Python的實現方式決定。
當變量a與b的值到1000時,你會發現他們的內存空間又不一樣了
a = 1000
b = 1000
id(a) == id(b)
a is b
總的來說寫程序是一般不用關注變量的內存空間地址,也很少使用is命令
python中僅緩存簡單的整型,(-1,100)。這個a=10,b=10,指向相同的整型對象,但是a=10.0和b=10.0時,並沒有指向相同的浮點型對象。