每空閒下來,就覺得以前寫的部落格很low........也許現在也很low~~~~好吧就當公升級版的low吧~~~~
如果要了解copy與deepcopy的區別,就需要了解python的儲存機制;python在賦值會在記憶體裡開闢乙個空間來存放值這就叫「記憶體位址」,同時會開闢乙個空間來存放名字叫命名,在資料相同長度在一定範圍、且資料為不可變型別時,python的內部會有節省記憶體機制讓幾個變數名指向同乙個記憶體位址,當然這個就不存在什麼深淺拷貝了hhh~,來說說可變型別吧,一般淺拷貝是對最外層的資料進行拷貝,也就是開闢乙個新的記憶體空間來儲存,而對內層的資料進行記憶體位址的引用,而深拷貝則是將原資料所有資料重新儲存到乙個新的記憶體空間中。反正記住一點,在多個變數引用同乙個記憶體位址的可變資料時,無論是對哪個變數進行修改,其餘的值也會隨之變化。
無論多複雜的資料都只複製最外層的資料,對內層資料物件的記憶體位址進行引用。
importcopy
list1 = ['
我是第一層
', ["
我是第二層
", ["
我是第三層
", ]]]
list2 =copy.copy(list1)
#檢視記憶體位址是否相同
print(id(list1), id(list2)) #
39613704 39613768
#這時你發現哇,記憶體位址不一樣是不是代表著這兩個資料就完全沒關係了,那我們修改其中乙個試試
改改資料")
print(list1) #
['我是第一層', ['我是第二層', ['我是第三層']], '改改資料']
print(list2) #
['我是第一層', ['我是第二層', ['我是第三層']]]
#你會發現還是不同,我們想想前言說的,淺拷貝是對最外層的資料建立乙個新的記憶體空間來儲存,而對內層的記憶體位址進行引用
改改資料")
print(list1) #
['我是第一層', ['我是第二層', ['我是第三層'], '改改資料'], '改改資料']
print(list2) #
['我是第一層', ['我是第二層', ['我是第三層'], '改改資料']]
#果然,在修改list1第二層資料的時候,list2也隨之改變了,由此可以驗證我們說的是正確的
完全複製原來變數的所有資料,在記憶體中開闢乙個新的記憶體位址。.....我就不寫例子了
list2 =copy.deepcopy(list1)list1無論如何修改,對list2都無法照成任何影響
python中的copy模組理解
學習簡單而使用的copy模組 copy模組中只有兩個方法 copy.copy和copy.deepcopy,分別稱之為淺拷貝和深拷貝,以澡堂子為例來解釋。import copy 1.copy.copy a 1,2,3,x y a引用 租賃 使用 這個澡堂子的四個隔間 位址 其中 x y 是乙個包間,適...
Ansible常用模組 copy模組
一 概述 copy 模組的作用就是拷貝檔案,它與 fetch 模組類似,不過,fetch 模組是從遠端主機中拉取檔案到 ansible 管理主機,而 copy 模組是將 ansible 管理主機上的檔案拷貝到遠端主機中。二 常用引數 src引數 用於指定需要copy的檔案或目錄。dest引數 用於指...
Python學習 copy模組
在python中,對於物件的拷貝,分為淺拷貝 copy 與深拷貝 deepcopy 兩種方式。淺拷貝由操作符 完成,或者由copy模組中的copy方法完成,而深拷貝由copy模組中的deepcopy方法承擔。對於淺拷貝與深拷貝,如果拷貝物件都是不可變物件,則兩者沒有區別。如果拷貝物件是可變物件,則淺...