什麼是小數據池
小數據池就是python中一種提升效率的方式,固定數據類型,使用同一個內存地址python
小數據池 is和==的區別
== 判斷等號倆邊的值是否相同
is 判斷兩個內存地址是否相同app
小數據池和代碼塊的關係
注意 : 先執行代碼塊後執行小數據池函數
小數據池 : 支持str,int,bool
數字範圍 : -5~256
字符串 : 1.在作乘法的時候總長度不能超過20
2.自定義的字符串,長度不限制,字符串必須(字母,數字,下劃線)組成
3.特殊字符(中文除外)定義一個時候,進行駐留
4.字符串1,其實就是賦值code
代碼塊 : 一個文件,一個模塊,一個函數,一個類
數字 : 所有駐留
字符串 : 1.字符串作乘法的時候總長度不能超過20
2.自定義的都駐留
3.字符串*1,其實就是賦值
4.python3.7 乘法的時候總長度不能超過4096內存
s = frozenset(["武當","少林","峨眉","丐幫"]) dic = {s:'123'} # 凍結s後就能夠正常使用了 print(dic)
先了解如下什麼是賦值rem
對於list, set, dict來講, 直接賦值,實際上是把內存地址交給變量,並非複製一分內容,因此lst1的內存指向和lst2是同樣的,lst1改變了,lst2也一樣發生了改變.字符串
lst1 = ["武當","少林","峨眉","丐幫"] lst2 = lst1 print(lst1) print(lst2) lst1.append("師太") print(lst1) # ["武當","少林","峨眉","丐幫","師太"] print(lst2) # ["武當","少林","峨眉","丐幫","師太"] --------------------------------- dic1 = {"age":104,"name":"張三丰"} dic2 = dic1 print(dic1) # {"age":104,"name":"張三丰"} print(dic2) # {"age":104,"name":"張三丰"} dic1['name']="滅絕" print(dic1) # {"age":104,"name":"滅絕"} print(dic2) # {"age":104,"name":"滅絕"}
淺拷貝class
淺拷貝,只會拷貝第一層,二層的內容不會拷貝,因此被稱爲淺拷貝效率
lst1 = ["張三丰","方丈","乞丐"] lst2 = lst1.copy() lst1.append("滅絕") print(lst1) print(lst2) print(id(lst1), id(lst2)) # 兩個lst徹底不同,內存地址和內容也不同,可是實現了內存的拷貝 --------------------------------- lst1 = ["張三丰","乞丐","方丈",["祥龍","伏虎","羅漢"]] lst2 = lst1.copy() lst1[3].append("滅絕") print(lst1) # ["張三丰","乞丐","方丈",["祥龍","伏虎","羅漢","滅絕"]] print(lst2) # ["張三丰","乞丐","方丈",["祥龍","伏虎","羅漢","滅絕"]] print(id(lst1[3]),id(lst2[3])) # id相同 # 只會拷貝第一層,二層的內容不會拷貝,所以第二層元素髮生改變則都會改變.
深拷貝import
深度拷貝,把元素內部的元素徹底進行拷貝複製,一個改變另外一個不會跟着改變,當使用深拷貝時須要調用import copy.
import copy lst1 = ["張三丰","乞丐","方丈",["祥龍","伏虎","羅漢"]] lst2 = copy.deepcopy(lst1) lst1[3].append("滅絕") print(lst1) # ["張三丰","乞丐","方丈",["祥龍","伏虎","羅漢","滅絕"]] print(lst2) # ["張三丰","乞丐","方丈",["祥龍","伏虎","羅漢"]] print(id(lst1[3]), id(lst2[3])) # id不一樣 # 元素內部的元素徹底進行拷貝複製,一個改變另外一個不會跟着改變