1.在了解深淺拷貝之前,我們先明確python中的可變與不可變
int str float tuple bool
list set dict
2.淺拷貝copy.copy()
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
可以看出在淺拷貝中乙個列表中的巢狀列表的值改變之後,另乙個列表會相應的改變!因為它們巢狀的列表使用的是同乙個記憶體位址**看的不是很明顯,我們直接看圖↓
3.深拷貝copy.deepcopy()
列表中可變型別的元素,會有乙個新的位址,而不是像淺拷貝一樣共用乙個位址
import copy # 此處需要引入copy
lst0 =[0
,1,[
1,2,
3]]lst5 = copy.deepcopy(lst0)//[
0,1,
[1,2
,3]]
lst0 == lst5 //
true
lst0[2]
[1]=
4print
(lst5)//[
0,1,
[1,2
,3]]
// 可以看出深拷貝和淺拷貝不一樣之處在於對於巢狀的引用部分會獨自分配記憶體!
tip:切片操作類似淺拷貝
總結
1、python中物件的賦值都是進行物件引用(記憶體位址)的傳遞。
2、淺拷貝它拷貝了物件,但對於物件中的元素,依然使用的是原始的引用(記憶體位址),但所含元素(父物件)的子元素(子物件)不會被拷貝。
3、深拷貝可將父物件和子物件進行拷貝。
python中深淺拷貝
先弄懂下面概念 變數 引用 物件 可變物件,不可變物件 切片 拷貝 淺拷貝,深拷貝 變數是乙個系統表的元素,擁有指向物件的鏈結的空間 物件是被分配的一塊記憶體,儲存其所代表的值 引用是自動形成的從變數到物件的指標 在python中不可變物件知 一旦建立就不可修改物件,包括字元創,元組,數字 在pyt...
Python 中的深淺拷貝
python 中的物件之間賦值時,時按照引用傳遞,如果需要拷貝物件 需要使用標準庫中的copy模組 1.copy.copy淺拷貝 只拷貝父物件,不會拷貝物件的內部的子物件 2.copy.deepcopy深拷貝 拷貝物件及其子物件 示例 encoding utf 8 import copy a 1,2...
python中的深淺拷貝
深淺拷貝 定義 1.淺拷貝 拷貝了最外層的物件,內部的元素只拷貝了乙個引用 2.深拷貝 外層的物件和內部的元素都拷貝 賦值 了一遍 術語 1.變數 是乙個系統表的元素,擁有指向物件的連線空間 2.物件 會在記憶體中占用一塊空間 3.引用 是自動形成的從變數到物件的指標 首位址,引用 4.型別 物件型...