最近開始學習python,其實知道python和想學的念頭算算也有兩三年了(好慚愧》<~),但怎麼說也一直沒有乙個「誘因」吧。。然後實驗室最近需要學習swift物件儲存,加之openstack這個開源雲平台的整套東西都是用python寫的,所以go go go開始動手啦。
作為第一篇學習記錄,題目實在是不好起。。進入正題。。
首先,丟擲題目:
定義變數
1 a = 102 b = 10
3 c = 100
4 d = 100
5 e = 10.0
6 f = 10.0
請給出以下比較的輸出結果
1 a isb2#true
34 c isd5
#true
67 e isf8
#false
首先,我們需要辨別is和==的區別:is用於測試兩個物件是否指向同乙個物件,而==比較的是物件的值。所以
a is b
這個表示式等價於線面這個表示式:
id(a) == id(b)
因此在上述題目中,我們建立的這「6個」數值物件,實際上並不是6個,而是a和b指向同乙個,c和d指向同乙個,e和f分別為乙個值為10.0的物件。為什麼我們本應建立的6個物件變成了4個呢?這是由於整型物件和字串物件是不可變物件,所以python會很高效的快取它們,這會造成我們認為python應該建立新物件時,它卻沒有建立新物件的假象。再來看兩個例子:
x = 9999y = 9999s1 = 'a string
's2 = '
a string'#
輸出結果
x isy#
false
s1 iss2#
true
x和y都建立了9999,為什麼它們又沒有指向同乙個9999物件呢?這是因為python僅快取簡單整型,因為它認為在python應用程式中這些小整型會被經常用到,範圍會根據版本不同有所變動。在python2.3中決定,在預定義快取字串表之外的字串,如果不再有任何引用指向它,那麼這個字串將不會被快取。
此外,針對另一種不可變型別 元組,它的行為與整型物件和字串物件有些不同,例如:
t1 =()t2 =()
t3 = (1, 2)
t4 = (1, 2) #
輸出結果
t1 ist2#
true
t3 ist4#
false
因此,並不能說明不可變型別中相同的物件值具有相同的引用,要看具體的整型數值範圍、元組是否為空等情況。
python物件身份的比較
物件和類 物件 屬性 方法 python是把所有的都當做乙個物件,屬性就是乙個具體的值,而方法就是對於物件來說,可以通過什麼方法來操作物件。物件身份的比較 foo1 foo2 4.3 可能我們會認為這是乙個多重賦值的過程,將4.3賦值為foo1,foo2這兩個變數,但是實際上是建立了乙個4.3的數字...
物件身份比較操作符
1 python提供了is和is not操作符來測試兩個變數是否指向同乙個物件。a is b 這個表示式等價於下面的表示式。id a id b 2 a 1 id a 1502566672 b 1 id b 1502566672 c 1.0 id c 5448880 d 1.0 id d 329857...
物件的身份和型別
物件的身份和型別 比較兩個物件 def compare a,b if a is b a和b是同乙個物件 statements if a b a和b具有相同的值 statements if type a is type b a和b具有相同的型別 statements if type d is dict...