1. 程式人生 > >淺深copy

淺深copy

left ron 查看 int 表數據 gin div 小白 import

前言

列表中的每個元素在內存中都是相互獨立的,有自己的唯一標識符,可以通過 id() 函數來查看元素在內存中的唯一標識符。

淺深copy在列表數據量比較大的情況下,不建議使用,比較消耗內存資源。

淺深copy就是在內存中把一個列表復制一份,占用了兩份內存空間:

淺copy

元素值未修改

兩個列表的唯一標識符不一樣,元素的唯一標識符是一樣的(兩個列表共享一份元素值)。

元素值修改後

元素的唯一標識符改變,但是有子列表的情況下,子列表元素唯一標識符不改變。

總結:並非完全獨立的兩個列表。

深copy

元素值未修改

兩個列表的唯一標識符不一樣,元素的唯一標識符是一樣的,子列表的元素唯一標識符不一樣。

元素值修改後

元素的唯一標識符不一樣,子列表的元素唯一標識符不一樣。

總結:完全獨立的兩個列表。

names1 = [xiaoming,[xiaobai,18]]
names2
= names1.copy() # 淺copy print(names1=,names1,唯一標識符是,id(names1)) print(names1列表的元素1的唯一標識符是,id(names1[0]),元素2的唯一標識符是,id(names1[1])) print(\n) print(淺copy後names2的執行結果:) print(names2=,names2,唯一標識符是
,id(names2)) print(names2列表的元素1的唯一標識符是,id(names2[0]),元素2的唯一標識符是,id(names2[1])) print(\n) names2[0] = 小明 names2[1][0] = 小白 print(names2元素值修改後的執行結果:) print(names2=,names2,唯一標識符是,id(names2)) print(names2列表的元素1的唯一標識符是,id(names2[0]),元素2的唯一標識符是,id(names2[1])) import copy #深copy names3 = copy.deepcopy(names1)
print(\n) print(深copy後names3的執行結果:) print(names3=,names3,唯一標識符是,id(names3)) print(names3列表的元素1的唯一標識符是,id(names3[0]),元素2的唯一標識符是,id(names3[1])) names3[0] = 小剛 names3[1][0] = 小李 print(\n) print(names3元素值修改後的執行結果:) print(names3=,names3,唯一標識符是,id(names3)) print(names3列表的元素1的唯一標識符是,id(names3[0]),元素3的唯一標識符是,id(names3[1])) names1= [xiaoming, [xiaobai, 18]] 唯一標識符是 2511119409800 names1列表的元素1的唯一標識符是 2511120629936 元素2的唯一標識符是 2511119409736 淺copy後names2的執行結果: names2= [xiaoming, [xiaobai, 18]] 唯一標識符是 2511120630024 names2列表的元素1的唯一標識符是 2511120629936 元素2的唯一標識符是 2511119409736 names2元素值修改後的執行結果: names2= [小明, [小白, 18]] 唯一標識符是 2511120630024 names2列表的元素1的唯一標識符是 2511121340616 元素2的唯一標識符是 2511119409736 深copy後names3的執行結果: names3= [xiaoming, [小白, 18]] 唯一標識符是 2511121609480 names3列表的元素1的唯一標識符是 2511120629936 元素2的唯一標識符是 2511121470152 names3元素值修改後的執行結果: names3= [小剛, [小李, 18]] 唯一標識符是 2511121609480 names3列表的元素1的唯一標識符是 2511121340792 元素3的唯一標識符是 2511121470152

淺深copy