Python快取了整數和短字串

2021-08-30 10:56:58 字數 858 閱讀 5189

賦值語句是語言最常見的功能了。但即使是最簡單的賦值語句,也可以很有內涵。python的賦值語句就很值得研究。整數1為乙個物件。而a是乙個引用。利用賦值語句,引用a指向物件1。python是動態型別的語言(參考動態型別),物件與引用分離。python像使用「筷子」那樣,通過引用來接觸和翻動真正的食物——物件。

引用和物件

為了探索物件在記憶體的儲存,我們可以求助於python的內建函式id()。它用於返回物件的身份(identity)。其實,這裡所謂的身份,就是該物件的記憶體位址。

在我的計算機上,它們返回的是:

11246696

'0xab9c68'

分別為記憶體位址的十進位制和十六進製制表示。

在python中,整數和短小的字元,python都會快取這些物件,以便重複使用。當我們建立多個等於1的引用時,實際上是讓所有這些引用指向同乙個物件。

上面程式返回

可見a和b實際上是指向同乙個物件的兩個引用。

為了檢驗兩個引用指向同乙個物件,我們可以用is關鍵字。is用於判斷兩個引用所指的物件是否相同。

上面的注釋為相應的執行結果。可以看到,由於python快取了整數和短字串,因此每個物件只存有乙份。比如,所有整數1的引用都指向同一物件。即使使用賦值語句,也只是創造了新的引用,而不是物件本身。長的字串和其它物件可以有多個相同的物件,可以使用賦值語句建立出新的物件。

在python中,每個物件都有存有指向該物件的引用總數,即引用計數(reference count)。

我們可以使用sys包中的getrefcount(),來檢視某個物件的引用計數。需要注意的是,當使用某個引用作為引數,傳遞給getrefcount()時,引數實際上建立了乙個臨時的引用。因此,getrefcount()所得到的結果,會比期望的多1。

python整數和變數

1.整數 python可以處理任意大小的整數,當然包括負整數,在程式中的表示方法和數學上的寫法一模一樣。2.浮點數 浮點數也就是小數,之所以稱為浮點數,是因為按照科學記數法表示時,乙個浮點數的小數點位置是可變的,比如,1.23x109和12.3x108是完全相等的。注 整數和浮點數在計算機內部儲存的...

python整數和變數

1.整數 python可以處理任意大小的整數,當然包括負整數,在程式中的表示方法和數學上的寫法一模一樣。2.浮點數 浮點數也就是小數,之所以稱為浮點數,是因為按照科學記數法表示時,乙個浮點數的小數點位置是可變的,比如,1.23x109和12.3x108是完全相等的。注 整數和浮點數在計算機內部儲存的...

python整數和變數

1.整數 python可以處理任意大小的整數,當然包括負整數,在程式中的表示方法和數學上的寫法一模一樣。2.浮點數 浮點數也就是小數,之所以稱為浮點數,是因為按照科學記數法表示時,乙個浮點數的小數點位置是可變的,比如,1.23x109和12.3x108是完全相等的。注 整數和浮點數在計算機內部儲存的...