Python 列表深淺拷貝的用法
阿新 • • 發佈:2019-01-11
列表是一個有序的,可修改的,元素以逗號分割,以中括號包圍的序列。
1.對於淺copy來說,第一層建立的是新的記憶體地址,而從第二層開始,指向的都是同一個記憶體地址,所以對於第二層以及更深的層數來說,保持一致性。
lst1=['悟空','八戒',['西施','貂蟬']]
lst2=lst1.copy()
print(lst1)
print(lst2)
lst2[0]='猴哥'
print(lst2)
lst2[2][0]='楊貴妃'
print(lst2)
print(lst1)
輸出結果:
['悟空', '八戒', ['西施', '貂蟬']] ['悟空', '八戒', ['西施', '貂蟬']] ['猴哥', '八戒', ['西施', '貂蟬']] ['猴哥', '八戒', ['楊貴妃', '貂蟬']] ['悟空', '八戒', ['楊貴妃', '貂蟬']]
大家可以看到copy的變數中的第一層的是改變是不影響原變數的,但是第二層的改變是會影響到原變數的,所以淺copy的變數中的第二層以及更深層次的元素與原變數中的第二層以及更深層次的元素是公用的。
2.深拷貝需要匯入 copy 模組
import copy
lst1=['悟空','八戒',['西施','貂蟬']]
lst2=copy.deepcopy(lst1)
print(lst2)
lst2[0]='猴哥'
print(lst2)
lst2[2][0]='楊玉環'
print(lst2)
print(lst1)
輸出結果:
['悟空', '八戒', ['西施', '貂蟬']] ['猴哥', '八戒', ['西施', '貂蟬']] ['猴哥', '八戒', ['楊玉環', '貂蟬']] ['悟空', '八戒', ['西施', '貂蟬']]
對於深拷貝而言,複製的是原變數的所有元素(不管第一層還是更深層),不管這個怎樣被增改都不會對另一個產生影響,所以這就是深拷貝與淺拷貝最大的區別。