大家在面試的時候經常會遇到一個這樣的問題:請問python中的深淺拷貝有什麼區別?
下邊就簡單給大家總結一下這個問題:
一、直接賦值拷貝,比如:a=b
(1)數字和字符串在內存中是同一塊地址
(2)字典、列表、元組等其他類型也是同一塊內存地址,不發生變化
賦值:a=b
二、淺拷貝
淺拷貝需要導入copy模塊,並調用其copy方法。比如:b = copy.copy(a)
(1)數字和字符串在內存中是同一塊地址
(2)無嵌套的列表和字典,如a=[1,2,3]或a={'username':'zhangsan','password':123},內存地址會改變
(3)無嵌套的元組,如a=(1,2,3),在內存中是同一塊地址
(4)字典中嵌套列表,如a= {'username':'zhangsan','password':123,'code':[1,2,3]},第一層的內存地址會改變,其他的內存地址不發生改變。看下圖可以比較清楚了解。
淺拷貝:嵌套模式
三、深拷貝
淺拷貝需要導入copy模塊,並調用其deepcopy方法。比如:b = copy.deepcopy(a)
先上一個在pycharm中運行結果的圖
pycharm深拷貝
深拷貝的話記住一點:一定會每層重新新開闢一塊內存,但是最裡邊的最小元素,如zhangsan,123,[1,2,3],不會發生改變。如下圖所示:
深拷貝:嵌套模式
以上就是針對大多數情況的一個總結了,其實還有其他情況,但是大同小異,相信大家可以通過實驗自己得出結論。