深淺拷貝python python裡面的深淺拷貝

2021-10-13 05:50:42 字數 1125 閱讀 9673

1.深淺拷貝(⚠️重要)

1.1 淺拷貝

1.1.1 定義

只拷貝第一層的記憶體位址

1.1.2 淺拷貝示例

賦值 示意淺拷貝前先說明賦值

賦值共用同一塊記憶體空間,乙個變數的值改變,另乙個賦值的變數同時也改變

多個變數名指向同一塊記憶體空間

賦值示意圖

淺拷貝只拷貝第一層的記憶體位址

# 列表中淺拷貝有兩種方式lst = [1,1,3]new_lst = lst.copy()lst = [1,1,3]new_lst = lst[:]

淺拷貝只拷貝第一層的記憶體空間位址,淺拷貝的兩個變數是單獨的記憶體空間,不再是共用同乙個記憶體空間位址

淺拷貝單層元素示意圖(增加元素)

淺拷貝多層元素示意圖(修改元素)

淺拷貝多層元素示意圖(第二層增加元素)

1.1.3 淺拷貝總結

1.淺拷貝只複製第一層記憶體空間位址

1.淺拷貝,修改第一層元素或者追加元素,都是將舊指向改變為新指向,兩個變數互不影響

3.淺拷貝修改第二層及以下元素或者追加元素,修改的是兩個變數共用的值,此時修改會影響兩個變數

1.1.4 淺拷貝坑

1.2深拷貝

1.2.1 定義

不可變資料型別共用記憶體空間,可變資料型別開闢新的記憶體空間,不管巢狀多少層都是這樣的原理

1.2.2 深拷貝語法

import copy copy.deepcopy()

1.2.3 深拷貝示例

import copylst = [1,1,[3,4]]new_lst = copy.deepcopy(lst)print (id(lst[0]),id(new_lst[0]))           #lst[0]為1,1是整型,是不可變資料型別 --> 共用記憶體空間位址4464777164 4464777164print (id(lst[-1]),id(new_lst[-1]))140663166316984 140663166494088             #lst[-1]為[3,4],[3,4]是列表,是可變資料型別 --> 新開闢記憶體空間位址

1.2.4 深拷貝原理圖

1.2.5 深拷貝總結

深拷貝中,不可變資料型別共用記憶體空間位址,可變資料型別開闢新的記憶體空間,不管巢狀多少層都是這樣

深淺拷貝以及深淺拷貝的方法

先考慮一種情況,對乙個已知物件進行拷貝,編譯系統會自動呼叫一種建構函式 拷貝建構函式,如果使用者未定義拷貝建構函式,則會呼叫預設拷貝建構函式。執行結果 呼叫一次建構函式,呼叫兩次析構函式,兩個物件的指標成員所指記憶體相同,name指標被分配一次記憶體,但是程式結束時該記憶體卻被釋放了兩次,會造成記憶...

拷貝和深淺拷貝

當list2為list的拷貝物件時,list內的可變資料型別變化,list2變化 list內的不可變資料型別變化,list2變化。總之 list變化list2一定變化 list 1,2,3,4,list2 list print list print list2 1,2,3,4,5 1,2,3,4,5...

12 深淺拷貝

複製物件的基本概念 複製乙個物件作為副本,它會開闢一塊新的記憶體 堆記憶體 來儲存副本物件,就像複製檔案一樣.即源物件和副本物件是兩塊不同的記憶體區域.物件具備複製功能,必須實現協議,協議.常用的可複製物件有 nsnumber,nsstring,nsarray,nsdictionary.nsmuta...