python深淺拷貝deepcopy的簡單理解
阿新 • • 發佈:2018-12-11
以下是個人對Python深淺拷貝的通俗解釋,易於繞開復雜的Python資料結構儲存來進行理解!
- 高階語言中變數是對記憶體及其地址的抽象,Python的一切變數都是物件。
- 變數的儲存採用了引用語義的方式,儲存的只是一個變數的值所對應的地址資訊。
- 變數的每一次初始化(賦值),即將新的內容的地址賦給變數。
- 複雜資料結構儲存的是各個元素的值得儲存位置。
- 進行增刪改等操作時不改變資料本身的id,改變的各個元素的地址引用。
- 改變任何一個擁有相同id的變數時,其他相同id的變數也會相應改變。
- copy.copy(object),拷貝的是內巢狀結構的地址引用,當內巢狀結構發生變化時,淺拷貝相應的改變。
- copy.deepcopy(object),完全複製與變數相關的資料!跟別的操作不再有關係!
例項:
import copy li = [4,5] lts = [1,2,3,li] lt_copy= copy.copy(lts) lt_deepcopy = copy.deepcopy(lts) lts.append(6) lt_copy.append(7) print(lts,lt_copy) #輸出[1, 2, 3, [4, 5], 6] [1, 2, 3, [4, 5], 7] li.append(8) #內部表格li插入 print(lts,lt_copy,lt_deepcopy) #輸出[1, 2, 3, [4, 5, 8], 6] [1, 2, 3, [4, 5, 8], 7] [1, 2, 3, [4, 5]] #可以看到當對li操作時,lt_deepcopy不受影響!