Python中的深淺拷貝問題

Python中經常遇到列表嵌套拷貝問題,但是對拷貝的list進行元素操作時要注意拷貝的方式,要注意是深拷貝還是淺拷貝!

  • shadow拷貝(淺拷貝,也叫影子拷貝)
lst0 = [0,1,[1,2,3]]
lst5 = lst0.copy()  //[0,1,[1,2,3]]
lst0 == lst5  //True   
lst0[2] [1]  = 4  //[0,1,[1,4,3]]
print(lst5)  //[0,1,[1,4,3]]
lst5 ==lst0  //True
//可以看出在淺拷貝中一個列表中的嵌套列表的值改變之後,另一個列表會相應的改變!因爲它們嵌套的列表使用的是同一個內存地址

這裏寫圖片描述

如上圖所示!

  • 深拷貝
    在編寫深拷貝程序時要用到deepcopy函數,但是需要引入copy模塊!
import copy
lst0 = [0,1,[1,2,3]]
lst5 = lst0.deepcopy()  //[0,1,[1,2,3]]
lst0 == lst5  //True
lst0[2] [1] = 4
print(lst5)  //[0,1,[1,2,3]]
//可以看出深拷貝和淺拷貝不一樣之處在於對於嵌套的引用部分會獨自分配內存!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章