python_深浅拷贝
生活随笔
收集整理的這篇文章主要介紹了
python_深浅拷贝
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、賦值:
1 list_1=[['a','b'],1,2] 2 list_2=list_1 3 4 print(list_1) 5 print(list_2)>>>[['a', 'b'], 1, 2] >>>[['a', 'b'], 1, 2]?
在python3中賦值操作其實就是對象的應用,如上邊的例子list_1與list_2這倆變量指向的都是同一塊內存地址,也就是說list_2并沒有重新開辟一塊屬于自己內存空間。
(通過id( )函數可以查看對象的內存地址)
1 print(id(list_1)) 2 print(id(list_2))>>>1656445373192
>>>1656445373192
?
共同指向同一個內存地址(1656445373192),如果把這塊內存空間看成一個房間的話,那就是給這個房間找了兩個主人,房間里的所有東西屬于兩人的公共財產,同進退,共生死!
1 list_1=[['a','b'],1,2] 2 list_2=list_1 3 4 list_2[0][0]="aaa" 5 list_1[2]=222 6 7 print(list_1) 8 print(list_2) >>>[['aaa', 'b'], 1, 222]>>>[['aaa', 'b'], 1, 222]
10 del list_1 #deL函數只能刪除變量名,對內存地址不做操作 11 print(list_2)
>>>[['aaa', 'b'], 1, 222]
11 list_2.clear() #clear()函數不刪除變量名,但會清除對應的內存空間
12 print(list_1)
>>>[]
?
?
2、淺拷貝
1 list_1=[['a','b'],1,2] 2 3 #淺拷貝的三種形式,結果是一樣的 4 list_2=list_1.copy() 5 list_2=list_1[:] 6 7 import copy 8 list_2=copy.copy(list_1)?
淺拷貝之所以稱為淺拷貝,是它僅僅只拷貝了一層
1 list_1=[['a','b'],1,2] 2 list_2=list_1.copy() 3 4 list_2[0][0]="aaa" 5 list_2[2]=222 6 print(list_1) 7 print(list_2)>>>[['aaa', 'b'], 1, 2]
>>>[['aaa', 'b'], 1, 222]
?
如圖所說:list_2=list_1.copy() 其實等于 list_2=[[000123],1,2]。也就是說只有小列表中的元素是兩人的公共財產(好比倆人的孩子),1和2 賦予各自的私有財產。
3、深拷貝
1 list_1=[['a','b'],1,2] 2 3 import copy 4 list_2=copy.deepcopy(list_1) 5 6 list_2[0][0]="aaa" 7 list_2[2]=222 8 9 print(list_1) 10 print(list_2)>>>[['a', 'b'], 1, 2]
>>>[['aaa', 'b'], 1, 222]
?
深拷貝就比較直接了,就是很單純的很粗暴的克隆一份數據出來自己玩,自己想咋作就咋作,跟別人無關。
?
4、拷貝的警告
1、對于非容器類型,如數字,字符,以及其它“原子”類型,沒有拷貝一說。產生的都是原對象的引用。
2、如果元組變量值包含原子類型對象,即使采用了深拷貝,也只能得到淺拷貝。
?
轉載于:https://www.cnblogs.com/Adairye/p/8570929.html
總結
以上是生活随笔為你收集整理的python_深浅拷贝的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python学习day11
- 下一篇: bzoj1079: [SCOI2008]