Python基礎學習 06-小資料池-深淺拷貝-集合
阿新 • • 發佈:2020-11-17
目錄
Day06
小資料池
小資料池 -- 快取機制(駐留機制) == 判斷等號兩邊的值是否相等 is 判斷兩邊的記憶體地址是否相等 程式碼塊:一個檔案,一個函式,一個類,一個模組,終端中每一行是一個程式碼塊; 數字: 在同一程式碼塊下,只要內容相等就採用相同的記憶體地址(-5以後就不是) 數字在做乘法的時候範圍 -5~256 數字在做乘法的時候不能使用浮點數 字串: 在同一程式碼塊下,只要內容相同就採用相同的記憶體地址 乘法的時候總長度不能超過20 乘法的時候中文,特殊符號乘以1或0 布林值: 在同一程式碼塊下,只要內容相同就採用相同的記憶體地址 小資料池: 數字: -5~256 字串: 在同一程式碼塊下,只要內容相同就採用相同的記憶體地址 乘法的時候總長度不能超過20 乘法的時候中文,特殊符號乘以0 布林值: 在同一程式碼塊下,只要內容相同就採用相同的記憶體地址 小資料池的驗證方法:必須脫離程式碼塊才能進行驗證; 先執行程式碼塊的規則,再執行小資料的規則--(駐留機制)
深淺拷貝賦值
賦值
多個變數名指向同一個記憶體地址;
一個變數對其進行操作,其他變數檢視時都變動;
lst = [1,2,3,[5,6,7]]
lst1 = lst
print(lst1)
print(lst)
lst[-1].append(8)
print(lst1)
print(lst)
淺拷貝
淺拷貝的時候只拷貝第一層元素;
淺拷貝在修改第一層元素(不可變資料型別)的時候,拷貝出來的新列表不改變;
淺拷貝在修改第一層元素(可變資料型別)的時候,拷貝出來的新列表不改變;
淺拷貝在修改第一層元素中的元素(第二層)的時候,拷貝出來的新列表改變;
lst = [1,2,3,[5,6,7]] lst1 = lst.copy() print(lst[-1], id(lst[-1])) print(lst1[-1], id(lst1[-1])) # [5, 6, 7] 1932530034632 # [5, 6, 7] 1932530034632 lst = [1,2,3,[5,6,7]] lst1 = lst.copy() lst[3] = 567 print(lst1) print(lst) # [1, 2, 3, [5, 6, 7]] # [1, 2, 3, 567] lst = [1,2,3,4,[5,6,7,[8,9]]] lst1 = lst.copy() # [1,2,3,4,[5,6,7,[8,9]],10] lst1.append(10) print(lst) print(lst1) # [1, 2, 3, 4, [5, 6, 7, [8, 9]]] # [1, 2, 3, 4, [5, 6, 7, [8, 9]], 10] lst = [1,2,3,4,[5,6,7,[8,9]]] lst1 = lst.copy() lst1[-1][-1] = "56" print(lst) print(lst1) # [1, 2, 3, 4, [5, 6, 7, '56']] # [1, 2, 3, 4, [5, 6, 7, '56']] lst = [[1,2,],90,6,7,[5,6]] lst1 = lst.copy() lst1[-1] = 8 print(lst) print(lst1) # [[1, 2], 90, 6, 7, [5, 6]] # [[1, 2], 90, 6, 7, 8] dic = {"xiaoming":[1,2,3,[5,6]]} dic1 = dic.copy() dic["xiaoming"][0] = "56" print(dic) print(dic1) # {'xiaoming': ['56', 2, 3, [5, 6]]} # {'xiaoming': ['56', 2, 3, [5, 6]]}
深拷貝
深拷貝開闢一個容器空間(列表),不可變資料公用,可變資料型別(再次開闢一個新的空間);
空間裡的值是不可變的資料進行公用,可變的資料型別再次開闢空間;
import copy lst = [1,2,3,[4,5,6]] lst1 = copy.deepcopy(lst) lst[-1].append(8) print(lst) print(lst1) # [1, 2, 3, [4, 5, 6, 8]] # [1, 2, 3, [4, 5, 6]] lst = [1,2,3,[5,6,7,[8,10,9]]] import copy lst1 = copy.deepcopy(lst) print(id(lst[-1][-1])) print(id(lst1[-1][-1])) # 1934118758344 # 1934120008904
集合
集合 set
沒有值的字典,無序,不支援索引,天然去重
定義集合
s = {1, "xiaoming", False, (1,2,3), 123, 123, 1, 123}
print(s)
# {False, 1, (1, 2, 3), 'xiaoming', 123}
將列表去重
lst = [1,2,1,2,1,2,45,22,22,32,23,23,32,222]
print(list(set(lst)))
增
set = {False, 1, (1, 2, 3), 'xiaoming', 123}
set.add("777") # 只能新增一個
# {False, 1, 'xiaoming', (1, 2, 3), '777', 123}
set.update("今天是個好日子") # 迭代新增
print(set)
# {False, 1, '子', '777', '個', '好', '日', '是', (1, 2, 3), 'xiaoming', 123, '天', '今'}
刪
s = {1, 2, 3, 4}
print(s.pop(), s) # pop有返回值
# 1 {2, 3, 4}
s.remove(3) # 指定元素刪除
print(s)
{2, 4}
s.clear() # 清空
set() # 空集合
print(s)
改
先刪再加
查
for i in {1,2,3}:
print(i)
其他操作
s1 = {1,2,3,4,5,6,7}
s2 = {5,6,7}
print(s1 & s2) # 交集 {5, 6, 7}
print(s1 | s2) # 並集 {1, 2, 3, 4, 5, 6, 7}
print(s1 - s2) # 差集 {1, 2, 3, 4}
print(s1 ^ s2) # 反交集 {1, 2, 3, 4}
print(s1 > s2) # 超集(父集) True
print(s1 < s2) # 子集 False
print(frozenset(s1)) # 凍結集合,不常用
# frozenset({1, 2, 3, 4, 5, 6, 7})
dic = {frozenset(s1):1}
print(dic)
# {frozenset({1, 2, 3, 4, 5, 6, 7}): 1}