深拷貝 淺拷貝

2022-09-14 03:18:12 字數 607 閱讀 9826

言簡意賅的解釋:

淺拷貝操作時拷貝的不夠深,僅僅是對引用(位址)的拷貝,不涉及值。深拷貝是對物件資源(值)的拷貝。兩種拷貝都會生成乙個看起來相同的物件,他們本質的區別是拷貝出來的物件的元素位址是否和原物件一樣,也就是位址複製還是值複製的區別。

phyon中物件分為可變物件和不可變物件。

可變物件:可以在不改變其位址的情況下,修改位址所指向的值,例如列表。

不可變物件:物件位址所指向的值是不能修改的,如果你修改了這個物件的值,那麼物件的位址就改變了,這個物件也就不再是原來的物件了。所以無論是深拷貝還是淺拷貝,對不可變物件沒有影響。

建立新物件的方法:

1)賦值:賦值操作是建立源物件的乙個引用,源物件的id和新物件的id是一樣的,乙個物件修改另乙個也會修改。

2)淺拷貝:源物件與新物件部分元素獨立,是否完全獨立取決於元素中是否有可變物件,如果有可變物件,則乙個物件變化另乙個也會隨之變化

3)深拷貝:源物件與新物件完全獨立

結論:copy模組中無論是深拷貝deepcopy還是淺拷貝copy,都會建立乙個新的物件,新物件的id與源物件的id不同,然後再進行元素的拷貝,這與直接賦值是不同的。

兩種拷貝對不可變物件是沒有影響的,需要注意的是可變物件的拷貝。

淺拷貝 深拷貝

copy mutablecopy copy 不管是可變的,還是不可變的,結果都是不可變的 mutablecopy 不管是不可變的,還是可變的,結果都是可變的 nsmutablestring str nsmutablestring stringwithformat a nsarray arr1 str...

深拷貝 淺拷貝

c 中物件的複製就如同 轉殖 用乙個已有的物件快速地複製出多個完全相同的物件。一般而言,以下三種情況都會使用到物件的複製 1 建立乙個新物件,並用另乙個同類的已有物件對新物件進行初始化,例如 cpp view plain copy class rect rect rect1 rect rect2 r...

淺拷貝 深拷貝

retain是建立乙個指標,引用物件計數加1。copy屬性表示兩個物件內容相同,新的物件retain為1 與舊有物件的引用計數無關,舊有物件沒有變化。copy減少物件對上下文的依賴。retain屬性表示兩個物件位址相同 建立乙個指標,指標拷貝 內容當然相同,這個物件的retain值 1也就是說,re...