Python的基礎語法 5 基於Python特性的深Copy和淺Copy
阿新 • • 發佈:2018-12-11
python中的深copy和淺copy
#Python bytes/str #bytes 在Python3中作為一種單獨的資料型別,不能拼接,不能拼接,不能拼接
深copy和淺copy 深copy新建一個物件重新分配記憶體地址,複製物件內容。淺copy不重新分配記憶體地址,內容指向之前的記憶體地址。淺copy如果物件中有引用其他的物件,如果對這個子物件進行修改,子物件的內容就會發生更改。
import copy #這裡有子物件 numbers=['1','2','3',['4','5']] #淺copy num1=copy.copy(numbers) #深copy num2=copy.deepcopy(numbers) #直接對物件內容進行修改 num1.append('6') #這裡可以看到內容地址發生了偏移,增加了偏移‘6’的地址 print('numbers:',numbers) print('numbers memory address:',id(numbers)) print('numbers[3] memory address',id(numbers[3])) print('num1:',num1) print('num1 memory address:',id(num1)) print('num1[3] memory address',id(num1[3])) num1[3].append('6') print('numbers:',numbers) print('num1:',num1) print('num2',num2) 輸出: numbers: ['1', '2', '3', ['4', '5']] numbers memory address: 1556526434888 numbers memory address 1556526434952 num1: ['1', '2', '3', ['4', '5'], '6'] num1 memory address: 1556526454728 num1[3] memory address 1556526434952 numbers: ['1', '2', '3', ['4', '5', '6']] num1: ['1', '2', '3', ['4', '5', '6'], '6'] num2 ['1', '2', '3', ['4', '5']]
不可變物件:建立以後就不能修改的物件,例如整形,字串,元組。
可變物件:建立以後可以修改,例如:列表,字典,集合。
變數:系統的元素,擁有指向物件的連線空間
引用:自動生成的,從變數到物件的指標。
物件:系統分配的一塊記憶體空間 可以儲存自身的資料 深淺拷貝: 不可變物件沒有深淺拷貝這一說 可變物件才能談上深拷貝與淺拷貝
eg:>>> a=[[1,2,3],2,0] >>> b=a >>> c=a[:] >>> import copy >>> d=copy.copy(a) >>> id(a) 1538577742152 >>> id(b) 1538577742152 >>> id(c) 1538620860744 >>> id(d) 1538621694536 淺拷貝的方式: import copy 形式1: a=[1,2,3,4,5] b=copy.copy(a) 形式2: a=[1,2,3,4,5] c=a[:] 深拷貝的方式: import copy a=[[1,2,3],2,3] b=copy.deepcopy(a) 深淺拷貝的意義: 淺拷貝:節省記憶體空間 深拷貝:資料的儲存有保障