1. 程式人生 > >python 小數據池、代碼塊詳解

python 小數據池、代碼塊詳解

得到 pyc 長度 超過 新的 小寫 bsp div 開始

  首先我們來看看下面的問題,第一次遇到還以為見鬼了。

技術分享圖片 技術分享圖片 技術分享圖片

技術分享圖片技術分享圖片

看到上面這麽多種情況剛開始直接就懵逼了。100ID一樣,1000就不一樣。終端運行情況居然會和pycharm不一樣。

後面終於搞懂了,原來這裏頭有大學問,且看下面分析。

一、代碼塊

Python程序是由代碼塊構造的。塊是一個python程序的文本,他是作為一個單元執行的。

代碼塊:一個模塊,一個函數,一個類,一個文件等都是一個代碼塊。

而作為交互方式輸入的每個命令都是一個代碼塊。

也就是說:

技術分享圖片 技術分享圖片

技術分享圖片

所以這就很好解釋上面的情況了。但是當a,b的值為100時,在終端居然ID一致,這用代碼塊來解釋根本就解釋不通,所以得引出一個新的知識點,那就是數據池,。

二、小數據池

小數據池,也稱為小整數緩存機制,或者稱為駐留機制等。小數據池裏只有三種數據類型:整數,字符串,布爾值

python會將一定規則的字符串在字符串駐留池中,創建一份,當你將這些字符串賦值給變量時,並不會重新創建對象, 而是使用在字符串駐留池中創建好的對象。

使用小數據池的優點:能夠提高一些字符串,整數在時間和空間上的性能;需要值相同的字符串,整數的時候,直接從‘池’裏拿來用,避免頻繁的創建和銷毀,提升效率,節約內存。

1、關於整數

小數據池的範圍是-5~256 ,如果多個變量都是指向同一個(在這個範圍內的)數字,他們在內存中指向的都是一個內存地址。但是超過這範圍的數字,就不會加入數據池。

技術分享圖片技術分享圖片

2、關於字符串

字符串要重幾個大方面來進行討論。

2.1:字符串的長度為0或者1,默認都采用了駐留機制(小數據池)。

技術分享圖片技術分享圖片

2.2,字符串的長度>1,且只含有大小寫字母,數字,下劃線時,才會默認駐留。

技術分享圖片

3.3,用乘法得到的字符串,分兩種情況。

33.1 乘數為1時:默認駐留;

技術分享圖片

3.3.2乘數>=2時:僅含大小寫字母,數字,下劃線,總長度<=20,默認駐留

技術分享圖片

4、指定駐留

from sys import intern
a = intern(hello!@*20)
b = intern(hello!@*20)
print(a is b)
#指定駐留是你可以指定任意的字符串加入到小數據池中,讓其只在內存中創建一個對象,多個變量都是指向這一個字符串。

python 小數據池、代碼塊詳解