數字類型是不可變類型。所謂的不可變類型,指的是類型的值一旦有不同了,那么它就是一個全新的對象。數字1和2分別代表兩個不同的對象,對變量重新賦值一個數字類型,會新建一個數字對象。
還是要強調一下Python的變量和數據類型的關系,變量只是對某個對象的引用或者說代號、名字、調用等等,變量本身沒有數據類型的概念 。只有1,[1,2],"hello"這一類對象才具有數據類型的概念。
Python 支持三種不同的數字類型,整數、浮點數和復數。
整數
通常被稱為整型,數值為正或者負,不帶小數點。python 3的整型可以當做Long類型使用,所以python 3 沒有python 2的Long類型。
表示數字的時候,有時我們還會用八進制或十六進制來表示:
十六進制用0x前綴和0-9,a-f表示,例如:0xff00
八進制用0o前綴和0-7表示,例如0o45
python的整數長度為16,32位,并且通常是連續分配內存空間的。
從上面的空間地址看,地址之間正好差16,32。
小整數對象池
python初始化的時候會自動建立一個小整數對象池,方便我們調用,避免后期重復生成!這是一個包含262個指向整數對象的指針數組,范圍是-5到256。也就是說比如整數10,即使我們在程序里沒有創建它,其實在Python后臺已經悄悄為我們創建了。
為什么要這樣呢?我們都知道,在程序運行時,包括Python后臺自己的運行環境中,會頻繁使用這一范圍內的整數,如果每需要一個,你就創建一個,那么無疑會增加很多開銷。創建一個一直存在,永不銷毀,隨用隨拿的小整數對象池,無疑是個比較實惠的做法。
從id(-6)和id(257)的地址,我們能看出小整數對象池的范圍,正好是-5到256。
除了小整數對象池,Python還有整數緩沖區的概念,也就是剛被刪除的整數,不會被真正立刻刪除回收,而是在后臺緩沖一段時間,等待下一次的可能調用。
上面,我給變量a賦值了整數100,看了一下它的內存地址。然后我把a刪了,又創建個新變量b,依然賦值為100,再次看下b的內存地址,和以前a存在的是一樣的。
浮點數
浮點數也就是小數,如1.23,3.14,-9.01,等等。但是對于很大或很小的浮點數,一般用科學計數法表示,把10用e替代,1.23x10^9就是1.23e9,或者12.3e8,0.000012可以寫成1.2e-5,等等。
復數(complex)
復數由實數部分和虛數部分構成,可以用a + bj,或者complex(a,b)表示,復數的實部a和虛部b都是浮點。
數字類型轉換
在某些特定的情況下,我們需要對數字的類型進行轉換。python為我們提供了內置的數據類型轉換函數。
轉換過程中如果出現無法轉換的對象,則會拋出異常,比如int("haha")
數學計算
對于數學計算,除了前面提到過的簡單的加減乘除等等,更多的科學計算需要導入math這個庫,它包含了絕大多數我們可能需要的科學計算函數,如下表
例子