深淺拷貝分為兩部分,一部分是數字和字串另一部分是列表、元組、字典等其他資料型別。
對於數字
和字串
而言,賦值、淺拷貝和深拷貝無意義,因為他們的值永遠都會指向同乙個記憶體位址。
# 匯入copy模組》 import copy# 定義乙個變數var1>>> var1 = 123對於字典、元祖、列表 而言,進行賦值、淺拷貝和深拷貝時,其記憶體位址的變化是不同的。# 輸出var1的記憶體位址》 id(var1)1347747440>>> var2 = var1
# var2的記憶體位址和var1相同》 id(var2)1347747440
# 淺拷貝》 var3 = copy.copy(var1)
# var3的記憶體位址和var1相同》 id(var3)1347747440
# 深拷貝》 var4 = copy.deepcopy(var1)# var4的記憶體位址和var1相同》 id(var4)1347747440
var1 =賦值
賦值,只是建立乙個變數,該變數指向原來記憶體位址,如:
>>> var1 = >>> var2 = var1>>> id(var1)1937003361288>>> id(var2)1937003361288如圖所示:
淺拷貝 淺拷貝,在記憶體中只額外建立第一層資料
# 匯入拷貝模組》 import copy>>> var1 =如圖所示:# 使用淺拷貝的方式》 var2 = copy.copy(var1)
# 兩個變數的記憶體位址是不一樣的》 id(var1)2084726354952>>> id(var2)2084730248008# 但是他們的元素記憶體位址是一樣的》 id(var1["k1"])2084726207464>>> id(var2["k1"])2084726207464
深拷貝 深拷貝,在記憶體中將所有的資料重新建立乙份(排除最後一層,即:python內部對字串和數字的優化)
# 匯入拷貝模組》 import copy>>> var1 =如圖所示:# 使用深拷貝的方式把var1的內容拷貝給var2>>> var2 = copy.deepcopy(var1)
# var1和var2的記憶體位址是不相同的》 id(var1)1706383946760>>> id(var2)1706389852744
# var1和var2的元素"k3"記憶體位址是不相同的》 id(var1["k3"])1706389853576>>> id(var2["k3"])1706389740744# var1和var2的"k3"元素的記憶體位址是相同的》 id(var1["k3"][1])1706383265744>>> id(var2["k3"][1])1706383265744
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...
python深淺拷貝
python 深淺拷貝 shallow copy 和 deep copy 對於乙個列表,列表裡面可以再放入乙個列表 1 若想複製這乙個列表,使用列表的普通的copy 方法,只能拷貝出列表裡表層的元素,而列表裡的列表卻無法拷貝,只能指向前乙個列表.修改拷貝出的列表裡列表裡的元素,原來的列表會發生改變....