深淺拷貝 知識點補充
阿新 • • 發佈:2018-09-18
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
都不一樣了. 深度拷貝. 把元素內部的元素完全進行拷貝復制. 不會產生一個改變另一個跟著改變的問題
深淺拷貝 知識點補充