1. 程式人生 > >深淺拷貝 知識點補充

深淺拷貝 知識點補充

deep port pre 發現 元素 name style color ()

深淺拷貝

lst1 = ["金毛獅王", "紫衫龍王", "白眉鷹王", "青翼蝠王"]
lst2 = lst1
print(lst1)
print(lst2)
lst1.append("楊逍")
print(lst1)
print(lst2)
結果:
[金毛獅王, 紫衫龍王, 白眉鷹王, 青翼蝠王, 楊逍]
[金毛獅王, 紫衫龍王, 白眉鷹王, 青翼蝠王, 楊逍]
dic1 = {"id": 123, "name": "謝遜"}
dic2 = dic1
print(dic1)
print(dic2)
dic1[name] = "範瑤"
print
(dic1) print(dic2) 結果: {id: 123, name: 謝遜} {id: 123, name: 謝遜} {id: 123, name: 範瑤} {id: 123, name: 範瑤}

對於list, set, dict來說, 直接賦值. 其實是把內存地址交給變量. 並不是復制一份內容. 所以lst1的內存指向和lst2是一樣的. lst1改變了, lst2也發生了改變

淺拷貝

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])) 結果: [何炅, 杜海濤, 周渝民, [麻花藤, 馬蕓, 周筆暢, 無敵是多磨寂寞]] [何炅, 杜海濤,
周渝民, [麻花藤, 馬蕓, 周筆暢, 無敵是多磨寂寞]] 4417248328 4417248328

淺拷貝. 只會拷貝第一層. 第二層的內容不會拷貝. 所以被稱為淺拷貝

深拷貝

import copy
lst1 = ["何炅", "杜海濤","周渝民", ["麻花藤", "馬蕓", "周筆暢"]]
lst2 = copy.deepcopy(lst1)
lst1[3].append("無敵是多磨寂寞")
print(lst1)
print(lst2)
print(id(lst1[3]), id(lst2[3]))
結果:
[何炅, 杜海濤, 周渝民, [麻花藤, 馬蕓, 周筆暢, 無敵是多磨寂寞]]
[何炅, 杜海濤, 周渝民, [麻花藤, 馬蕓, 周筆暢]]
4447221448 4447233800

都不一樣了. 深度拷貝. 把元素內部的元素完全進行拷貝復制. 不會產生一個改變另一個跟著改變的問題

深淺拷貝 知識點補充