1. 程式人生 > >Python基本型別補充及深淺拷貝

Python基本型別補充及深淺拷貝

  1. 基礎資料型別補充
        join()
        "*".join("馬虎疼") # 馬*虎*疼 把傳遞進去的引數進行迭代. 獲取到的每個元素和前面的*進行拼接. 得到的是字元
lst = ["alex", "dsb", "wusir", "xsb"]
# 使用前面的字串. 對後面的列表進行拼接,拼接的結果是一個字串
s = "_".join(lst)
print(s)

 

        split() 切割. 切割的結果是列表           列表和字典: 都不能在迴圈的時候直接刪除
        把要刪除的內容記錄在新列表中然後迴圈這個新列表. 刪除列表(字典)
lst = ["籃球", "排球" ,"足球", "電子競技", "檯球"]
# 最合理的刪除方式:
# 1. 把要刪除的內容寫在新列表中.
# 2. 迴圈這個新列表. 刪除老列表 # # 需求: 刪除列表中帶球字的運動專案 new_lst = [] for el in lst: if "" in el: new_lst.append(el) # 記錄要刪除的內容 # # 迴圈新列表. 刪除老列表 for el in new_lst: # ['籃球', '排球', '足球', '檯球'] lst.remove(el) print(lst)

 

        fromkeys()
fromkeys() 幫我們建立字典用的
# 把第一個引數進行迭代. 拿到每一項作為key和後面的value組合成字典 d = dict.fromkeys("張無忌", "趙敏") # 建立字典 print(d)

 

        坑1: 返回新字典. 不會更改老字典
        坑2: 當value是可變的資料型別. 各個key共享同一個可變的資料型別. 其中一個被改變了. 其他都跟著變  
    2. 深淺拷貝
        1. = 沒有建立新物件, 只是把記憶體地址進行了複製
        2. 淺拷貝  lst.copy() 只拷貝第一層.
lst1 = ["胡辣湯", "灌湯包", "油潑面", "麻辣香鍋"]
lst2 = lst1.copy()  # 拷貝, 可以幫我們建立新的物件,和原來長的一模一樣, 淺拷貝
#
print(id(lst1))
print(id(lst2))
#
lst1.append("葫蘆娃")
print(lst1)
print(lst2)

 


        3. 深拷貝
            import copy
            copy.deepcopy() 會把物件內部的所有內容進行拷貝
# 引入一個模組
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)

為什麼要有深淺拷貝?


提高建立物件的速度
計算機中最慢的. 就是建立物件. 需要分配記憶體.
最快的方式就是二進位制流的形式進行復制. 速度最快.