Python3 深淺拷貝

2022-07-13 12:27:08 字數 2380 閱讀 8125

在python中物件的賦值其實就是物件的引用。當建立乙個物件,把它賦值給另乙個變數的時候,python並沒有拷貝這個物件,只是拷貝了這個物件的引用而已。

1,變數:是乙個系統表的元素,擁有指向物件的連線空間。

2,物件:被分配的一塊記憶體,儲存其所代表的值。

3,引用:是自動形成的從變數到物件的指標。

4,注意:型別(int型別,long型別(python3已去除long型別,只剩下int型別的資料))屬於物件,不是變數。

5,不可變物件:一旦建立就不可修改的物件,包括字串、元組、數字。

6,可變物件:可以修改的物件,包括列表、字典。

1,切片可以應用於:列表、元組、字串,但不能應用於字典。

2,深淺拷貝,既可應用序列(列表、元組、字串),也可應用字典。

1,減少記憶體的使用。

2,以後在做資料的清洗、修改或者入庫的時候,對原資料進行複製乙份,以防資料修改之後,找不到原資料。

list型別

# 淺拷貝

'''淺拷貝方法:

1、a = b[:]

2、a = b.copy()

3、引用copy模組,import cope | a = copy.copy(b)

'''wife = ['diaoqian',1988,['slaras',10000]]

hasband = wife[:]

print(wife,hasband) # ['diaoqian', 1988, ['slaras', 10000]] ['diaoqian', 1988, ['slaras', 10000]]

hasband[0] = 'zhaoyun'

hasband[2][1] = 2000

print(hasband)

# ['zhaoyun', 1988, ['slaras', 2000]]

print(wife)

# ['diaoqian', 1988, ['slaras', 2000]]

'''淺拷貝原則:

1、只複製一層,他變我不變,其餘層,他變我也變。

2、如果只有一層,就相當於深複製了

'''# 深拷貝

'''深拷貝方法:

1、引用copy模組,import cope | a = copy.deepcopy(b)

'''import copy

wife = ['diaoqian',1988,['slaras',10000]]

hasband = copy.deepcopy(wife)

print(wife,hasband)

# ['diaoqian', 1988, ['slaras', 10000]] ['diaoqian', 1988, ['slaras', 10000]]

hasband[0] = 'zhaoyun'

hasband[2][1] = 8000

print(hasband)

# ['zhaoyun', 1988, ['slaras', 8000]]

print(wife)

# ['diaoqian', 1988, ['slaras', 10000]]

'''深拷貝小結:

1、深度拷貝就是轉殖乙份,具有自己單獨的記憶體位址,兩者完全不相干設,他變我不變。

'''

dict型別

# 淺拷貝

import copy

wife = ,'slaras':10000}

hasband = copy.copy(wife)

print(hasband,wife)

# , 'slaras': 10000} , 'slaras': 10000}

hasband['name']['diaoq']= 32

hasband['slaras'] = 12000

print(hasband)

# }print(wife)

# }# 深拷貝

import copy

wife = }

hasband = copy.deepcopy(wife)

print(hasband,wife)

# , 'slaras': 10000} , 'slaras': 10000}

hasband['name']['diaoq'] = 32

hasband['slaras'] = 12000

print(hasband)

# }print(wife)

# }

總結:不論針對列表還是字典,淺拷貝時,修改的元素型別是可變型別時,他變我也變,修改的型別是不可變型別時,他變我不變。

不論針對列表還是字典,深拷貝時,他變我不變。

可變型別:字典、列表。

不可變型別:整型、字串、元組。

python3 深淺拷貝例項詳解

list1 1,2,3 list2 list1 list1賦值給list2 print list1,list2,id list1 id list2 1,2,3,4 1,2,3,4 2701210018056 2701210018056 結論 使用等號賦值list1和list2 指向同一記憶體位址 l...

python 深淺拷貝案例 python 深淺拷貝

深淺拷貝 對於 數字 和 字串 而言,賦值 淺拷貝和深拷貝無意義,因為其永遠指向同乙個記憶體位址 import copy a1 22255 a2 22255 print id a1 id a2 3428240 3428240 對於字典 元祖 列表 而言,進行賦值 淺拷貝和深拷貝時,其記憶體位址的變化...

python 深淺拷貝

建立乙個寬度為3,高度為4的陣列 mylist 0 3 4 0,0,0 0,0,0 0,0,0 0,0,0 但是當操作mylist 0 1 1時,發現整個第二列都被賦值,變成 0,1,0 0,1,0 0,1,0 0,1,0 list n n shallow copies of list concat...