目錄深淺copy
is # 判斷兩個記憶體位址是否相同
== # 判斷等號兩邊的值是否相同
= 代表賦值 改變指向
在python中乙個模組,乙個函式,乙個類,乙個檔案等都是乙個**塊。
機制內容:python在執行同乙個**塊的初始化物件的命令時,會檢查是否其值是否已經存在,如果存在,會將其重用。換句話說:執行同乙個**塊時,遇到初始化物件的命令時,他會將初始化的這個變數與值儲存在乙個字典中,在遇到新的變數時,會先在字典中查詢記錄,如果有同樣的記錄那麼它會重複使用這個字典中的之前的這個值。所以在你給出的例子中,檔案執行時(同乙個**塊)會把i1、i2兩個變數指向同乙個物件,滿足快取機制則他們在記憶體中只存在乙個,即:id相同。
適用物件: int(float),str,bool。
1.先執行**塊,不符合**塊才會執行小資料
2.**塊: 乙個檔案,乙個模組,乙個函式,乙個類,終端中每一行都乙個**塊
3.小資料池就是python中一種提高效率的方式,固定資料型別使用同乙個記憶體位址
小資料池講解 不同**塊的
int 駐留
-5 ~ 256 *記住
字串 駐留
1.字串在做乘法的時候總長度不能超過20,進行駐留 # 記住
2.自己定義的字串 長度不限制 字串必須(字母,數字.下劃線)組成,進行駐留
3.特殊字元(中文除外)定義1個時候,進行駐留
4.字串*1 其實就是賦值
bool值就是true,false
怎麼能自己駐留?
需要使用python的內建模組 from sys import intern
# a = intern("@@@@@@"*20)
# b = intern("@@@@@@"*20)
# print(a is b) # 自己進行駐留
# 淺copy: list dict: 巢狀的可變的資料型別是同乙個。
淺拷貝:拷貝目標可變物件(list, dict, set)時,僅為 整體 第一層可變物件分配新的記憶體位址,第二層(元素)及以上的可變物件沿用之前物件的記憶體位址,此外**所有層的不可變物件(int, str, bool, tuple)均沿用之前物件的記憶體位址。
# 深copy: list dict: 巢狀的可變的資料型別不是同乙個 。
深淺拷貝的規律:
賦值: 兩個變數使用的是同乙個空間
淺拷貝:修改不可變資料型別,不變動,修改可變資料型別,變動
深拷貝:修改就不變動
賦值運算 = 不是copy 只是改變指向 id相同
小資料池和深淺拷貝
先執行 塊,不符合 塊才使用小資料池 數字支援範圍 5 256 is 和 is 判斷兩個記憶體位址是否相同 判斷兩個值是不是相等 is相同的,一定成立 相同的,is不一定成立 字串字串在做乘法的時候總長度不能超過20 自己定義的字串,長度不限制,字串必須由數字,字母,下劃線組成 特殊字元 中文除外 ...
python 小資料池 深淺拷貝 集合
1.小資料池 1.1 塊 乙個檔案,乙個函式,乙個類,乙個模組,終端中每一行 1.1.1 數字 5 256 1.1.2 字串 乘法時總長度不能超過20 1.1.3 布林值 內容相同記憶體位址相同 1.2 小資料池 1.2.1 數字 5 256 1.2.2 字串 乘法時總長度不能超過20 1.2.3 ...
賦值運算與深淺copy
1 複製運算 l1 1,2,3,a b l2 l1 l1 0 111 print l1 111,2,3,a b print l2 111,2,3,a b l1 3 0 hello print l1 111,2,3,hello b print l2 111,2,3,hello b 所以,對於賦值運算來...