前言 列表中的每個元素在記憶體中都是相互獨立的,有自己的唯一標識符,可以通過 id() 函數來查看元素在記憶體中的唯一標識符。 淺深copy在列表數據量比較大的情況下,不建議使用,比較消耗記憶體資源。 淺深copy就是在記憶體中把一個列表複製一份,占用了兩份記憶體空間: 淺copy 元素值未修改前 names ...
前言
列表中的每個元素在記憶體中都是相互獨立的,有自己的唯一標識符,可以通過 id() 函數來查看元素在記憶體中的唯一標識符。
淺深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就是在記憶體中把一個列表複製一份,占用了兩份記憶體空間:
淺copy
元素值未修改前
names1和names2兩個列表的唯一標識符不一樣。names1的元素和names2的元素的唯一標識符是一樣的(兩個列表共用一份元素值)。
元素值修改後
names1和names2的元素1的唯一標識符不一樣,names1和names2的元素2(子列表)的唯一標識符一樣。
總結:一個列表淺copy後與原列表並非完全獨立,兩個列表的唯一標識符不一樣,元素的唯一標識符不一樣,在有子列表的情況下,子列表的元素的唯一標識符一致。
深copy
元素值未修改前
names1和names3兩個列表的唯一標識符不一樣。names1和names3的元素1的唯一標識符一樣,names1和names3的元素2(子列表)的唯一標識符不一樣。
元素值修改後
names1和names3的元素1的唯一標識符不一樣,names1和names3的元素2(子列表)的唯一標識符不一樣。
總結:一個列表深copy後與原列表完全獨立,兩個列表的唯一標識符不一樣,元素的唯一標識符不一樣。
編寫時間:2018-09-07 21:58:01
修訂時間:2018-09-07 22:42:04