1、首先理解 is 和 == 的區別
python中的物件可以理解為包括以下幾個要素:id(身份標識)、type(資料型別)、value(資料值),is和==的區別就是 is 比較的是資料的id值,也就意味著只要 a is b == true 的話,a和b指向的是同乙個物件;==比較的是資料的value值。
2、**塊與**塊的快取機制
python的**是由塊構成的,每乙個類、函式、模組等都可以稱為**塊,此處需要注意:python互動模式的每一行均是乙個**塊。
python在執行同一**塊的初始化物件的命令時,會檢查其值是否已經存在,如果存在,會將其重用。也就是說遇到初始化物件的命令時,會將初始化的變數與值儲存在乙個字典中,遇到新的變數時,會去字典檢索,如果之前初始化過,那麼直接復用,注意:復用的物件在記憶體中只存在乙個,id值相同。**塊的快取機制適用範圍:int(float)、str、bool
3、小資料池
小資料池/駐留機制 是針對不同**塊之間的快取機制,有點類似於全域性的意思。
對於整數:python自動將 -5~256 的整數進行了快取,當你用這些資料的時候,並不會重新建立物件,而是使用已經建立好的快取物件。
對於字串:python會將一定規則的字串在字串駐留池中建立乙份,當字串賦值給變數時候,並不會重新建立物件。
4、注意
同一**塊下採用**塊的快取機制
不同**塊採用小資料池駐留機制
[python] 純文字檢視
複製** ?
12
3
4
5
6
7
a
=
888
b
=
888
print
(
id
(a),
id
(b))
# id值相同
print
(a
is
b)
# 結果為true
# 總計:此處使用**塊的快取機制
[python] 純文字檢視
複製** ?
0102
03
04
05
06
07
08
09
10
11
12
13
14
15
16
# 在互動模式下
in [
1
]: a
=
256
in [
2
]: b
=
256
in [
3
]: a
is
b
out[
3
]:
true
in [
4
]: c
=
257
in [
5
]: d
=
257
in [
6
]: c
is
d
out[
6
]:
false
# 總結:在互動模式下,每一行都是乙個**塊,所以使用小資料快取機制,整數的範圍是 -5~256,由上可知,257並不在快取池中
python小資料池
name jerry print id name is 是什麼?又是什麼?是比較的兩邊的數值是否相等,而 is 是比較的兩邊的記憶體位址是否相等。python程式是由 塊構造的。塊是乙個python程式的文字,他是作為乙個單元執行的。塊 乙個模組,乙個函式,乙個類,乙個檔案等都是乙個 塊。pytho...
python中的 小資料池 is 和
一種資料快取機制,也被稱為駐留機制 小資料池針對的是 整數 字元 布林值 其他的資料型別不存在駐留機制 在python中對 5 到256之間的整數會被駐留在記憶體中,將一定規則的字串快取.在使用的時候,記憶體中只會建立乙個該資料的物件.儲存在小資料池中.當使用的時候直接從小資料池中獲取物件的記憶體引...
Python細節 二 小資料池
python是由 塊構成的 塊,乙個模組.乙個函式,乙個類,乙個檔案,eval exec 執行的時候也是乙個 塊 1.記憶體位址 id 通過id 我們可以檢視到乙個變數表示的值在記憶體中的位址 a alex print id a 4541631158 和is 比較的是值 內容 true is比較的是...