python當中的深淺copy

2022-07-18 18:33:12 字數 760 閱讀 3396

首先,我們要明確以下概念:

在python中,物件按照可變不可變分為可變物件和不可變物件:

可變物件 指 可以在原處修改,而不用建立新的物件(包括列表,字典,集合);不可變物件指 不支援在原處修改,只能通過表示式建立新的物件,然後把結果分配給變數(包括 數字,字串,元組)。

a = 3,這段**的執行過程是這樣:

在python中物件的賦值其實就是物件的引用。當建立乙個物件,把它賦值給另乙個變數的時候,python並沒有拷貝這個物件,只是拷貝了這個物件的引用而已。

在業務中有時我們需要複製乙個物件,但是又不想對原物件產生***,那就不能通過賦值給新變數來解決了(賦值不是拷貝乙個物件)。python專門提供了一種拷貝機制,基於原物件建立乙個含有相同值的物件。拷貝有copy模組提供。

拷貝分成淺拷貝和深拷貝。

淺拷貝包括:

深拷貝:

淺拷貝與深拷貝的區別

即淺拷貝只會對父物件第一層進行拷貝,對於父物件的子物件並沒有真正的拷貝。對於第一層的修改原始改變,自己不變,對於其他層,原始改變,自己也改變。

原理淺拷貝:拷貝了最外圍的物件本身,內部的元素都只是拷貝了乙個引用而已。也就是,把物件複製一遍,但是該物件中引用的其他物件不複製。深拷貝:外圍和內部元素都進行了拷貝物件本身,而不是引用。也就是,把物件複製一遍,並且該物件中引用的其他物件也複製。換句話來說,深拷貝的物件和原始物件是完全不同的兩個物件,只是內容/值相同而已。

補充 python深淺copy

name liming lilongfei duanwenchao tangeng 11 yuxiaobin name2 name.copy 淺copy,只copy第一層 print name print name2 name 1 haha 當修改name的第一層時,name2不發生變化 name ...

python 深淺copy總結

總結 總結 假設l1為原資料,l2為deepcopy後的資料 1.淺copy,只能改變第一層的記憶體位址 不可變資料型別除外 2.深copy,能夠改變第一層和第二層的記憶體位址 不可變資料型別除外 3.不可變型別,位址不會發生變化,且不可使用copy 可以使用copy.deepcopy 4.對dee...

Python賦值 深淺copy

在 python 中,物件的賦值就是簡單的物件引用,這點和 c 不同,如下所示 a 1,2,hello python c b a在上述情況下,a 和 b 是一樣的,他們指向同一片記憶體,b 不過是 a 的別名,是引用.我們可以使用 b is a 去判斷,返回 true,表明他們位址相同,內容相同,也...