在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...