基本資料型別補充 深淺拷貝
阿新 • • 發佈:2018-12-04
1. 基礎資料型別補充
大多數的基本資料型別的知識.已經學完了
join()
"*".join("馬虎疼") # 馬*虎*疼 把傳遞進去的引數進行迭代. 獲取到的每個元素和前面的*進行拼接. 得到的是字串
# lst = ["alex", "dsb", "wusir", "xsb"] # 使用前面的字串. 對後面的列表進行拼接,拼接的結果是一個字串 # s = "_".join(lst) # print(s)
split() 切割. 切割的結果是列表
# split() 根據你給的引數進行切割, 切割的結果是列表 # s = "alex_dsb_wusir_xsb"# lst = s.split("_") # 列表 # print(lst)
列表和字典: 都不能在迴圈的時候直接刪除
把要刪除的內容記錄在新列表中然後迴圈這個新列表. 刪除列表(字典)
需要把字串轉化成列表: split()
# 把列表轉化成字串: join()
列表刪除:
lst = ["籃球", "排球" ,"足球", "電子競技", "檯球"] # 1. 把要刪除的內容寫在新列表中.# 2. 迴圈這個新列表. 刪除老列表# 需求: 刪除列表中代球字的運動專案new_lst = []for el in lst:if "球" in el: new_lst.append(el) # 記錄要刪除的內容# 要刪除的列表print(new_lst)# 迴圈新列表. 刪除老列表for el in new_lst: # ['籃球', '排球', '足球', '檯球'] lst.remove(el)print(lst)
字典刪除:
字典在被迴圈的時候是不能刪除的. dic = {"張無忌":"乾坤大挪移", "周芷若":"哭", "趙敏":"賣萌"} # # for k in dic: # # # dic.pop(k) # dictionary changed size during iteration# # dic["滅絕師太"] = "倚天屠龍劍" # dictionary changed size during iteration # # # 把要刪除的key儲存在一個新列表中 # # 迴圈這個類表.刪除字典中的key:value # lst = [] # for k in dic: # lst.append(k) # # # 迴圈列表 # # 刪除字典中的內容 # for el in lst: # dic.pop(el) # print(dic)
fromkeys()
坑1: 返回新字典. 不會更改老字典
坑2: 當value是可變的資料型別. 各個key共享同一個可變的資料型別. 其中一個被改變了. 其他都跟著變
# 坑: 大坑, 神坑 # fromkeys() 幫我們建立字典用的 # 把第一個引數進行迭代. 拿到每一項作為key和後面的value組合成字典 # d = dict.fromkeys("張無忌", "趙敏") # 建立字典 # print(d) # 坑1: 返回新字典. 和原來的字典沒有關係 # dic = {} # d = dic.fromkeys("風扇哥", "很困") # print(dic) # {} # print(d) # 坑2: 如果value是可變的資料型別, # 那麼其中一個key對應的value執行的更改操作. 其他的也跟著變 # d = dict.fromkeys("胡辣湯", []) # print(d) # {'胡': [], '辣': [], '湯': []} # print(id(d['胡'])) # print(id(d['辣'])) # print(id(d['湯'])) # d['胡'].append("河南特色") # print(d) # {'胡': ['河南特色'], '辣': ['河南特色'], '湯': ['河南特色']}
# 程式設計師找工作和菜市場大媽買白菜是一樣的
2. 深淺拷貝(重點, 難點)
1. = 沒有建立新物件, 只是把記憶體地址進行了複製
2. 淺拷貝 lst.copy() 只拷貝第一層.
3. 深拷貝
import copy
copy.deepcopy() 會把物件內部的所有內容進行拷貝
# lst1 = ["胡辣湯", "灌湯包", "油潑面", "麻辣香鍋"] # lst2 = lst1.copy() # 拷貝, 抄作業, 可以幫我們建立新的物件,和原來長的一模一樣, 淺拷貝 # # print(id(lst1)) # print(id(lst2)) # # lst1.append("葫蘆娃") # print(lst1) # print(lst2)
# lst1 = ["胡辣湯", "灌湯包", "油潑面", "麻辣香鍋", ["長白山", "白洋澱", "黃鶴樓"]] # lst2 = lst1.copy() # 淺拷貝. 只拷貝第一層內容 # # print(id(lst1)) # print(id(lst2)) # # print(lst1) # print(lst2) # # lst1[4].append("葫蘆娃") # print(lst1) # print(lst2)
import copy lst1 = ["胡辣湯", "灌湯包", "油潑面", "麻辣香鍋", ["長白山", "白洋澱", "黃鶴樓"]] lst2 = copy.deepcopy(lst1) # 深拷貝: 物件內部的所有內容都要複製一份. 深度克隆(clone). 原型模式 print(id(lst1)) print(id(lst2)) print(lst1) print(lst2) lst1[4].append("葫蘆娃") print(lst1) print(lst2)
為什麼要有深淺拷貝?
提高建立物件的速度
計算機中最慢的. 就是建立物件. 需要分配記憶體.
最快的方式就是二進位制流的形式進行復制. 速度最快.