? ?今日內容一些小的干貨? ? ? ?
- 一. id is ==
- 二. 代碼塊
- 三. 小數據池
- 四. 總結
?
python小數據池,代碼塊的最詳細、深入剖析
一,id,is,==
在Python中,id是什么?id是內存地址,比如你利用id()內置函數去查詢一個數據的內存地址:
name = '太白' print(id(name)) # 1585831283968
那么 is 是什么? == 又是什么?
== 是比較的兩邊的數值是否相等,而 is 是比較的兩邊的內存地址是否相等。 如果內存地址相等,那么這兩邊其實是指向同一個內存地址。
可以說如果內存地址相同,那么值肯定相同,但是如果值相同,內存地址不一定相同。
二,代碼塊。
根據官網提示我們可以獲知:

上面的主要意思是:
Python程序是由代碼塊構造的。塊是一個python程序的文本,他是作為一個單元執行的。
代碼塊:一個模塊,一個函數,一個類,一個文件等都是一個代碼塊。
而作為交互方式輸入的每個命令都是一個代碼塊。
什么叫交互方式?就是咱們在cmd中進入Python解釋器里面,每一行代碼都是一個代碼塊,例如:
而對于一個文件中的兩個函數,也分別是兩個不同的代碼塊:
OK,那么現在我們了解了代碼塊,這和小數據池有什么關系呢?且聽下面分析。
代碼塊的緩存機制
Python在執行同一個代碼塊的初始化對象的命令時,會檢查是否其值是否已經存在,如果存在,會將其重用。換句話說:執行同一個代碼塊時,遇到初始化對象的命令時,他會將初始化的這個變量與值存儲在一個字典中,在遇到新的變量時,會先在字典中查詢記錄,如果有同樣的記錄那么它會重復使用這個字典中的之前的這個值。所以在你給出的例子中,文件執行時(同一個代碼塊)會把i1、i2兩個變量指向同一個對象,滿足緩存機制則他們在內存中只存在一個,即:id相同。
代碼塊的緩存機制的適用范圍:?int(float),str,bool。
int(float):任何數字在同一代碼塊下都會復用。
bool:True和False在字典中會以1,0方式存在,并且復用。
str:幾乎所有的字符串都會符合緩存機制,具體規定如下(了解即可!):
1,非乘法得到的字符串都滿足代碼塊的緩存機制:
s1 = '太白@!#*ewq' s2 = '太白@!#*ewq' print(s1 is s2) # True
2,乘法得到的字符串分兩種情況:
2.1 乘數為1時,任何字符串滿足代碼塊的緩存機制:
b1 = '太白@5847395QQ0743895*&^%$#((&_+(())' *1 a1 = '太白@5847395QQ0743895*&^%$#((&_+(())' *1print(a1 is b1) # True
2.2 乘數>=2時:僅含大小寫字母,數字,下劃線,總長度<=20,滿足代碼塊的緩存機制:
s1 = 'old_' * 5 s2 = 'old_' * 5 print(s1 is s2) # True
?優點:能夠提高一些字符串,整數處理人物在時間和空間上的性能;需要值相同的字符串,整數的時候,直接從‘字典’中取出復用,避免頻繁的創建和銷毀,提升效率,節約內存。
?
?
?