copy與mutableCopy的陷阱

2022-09-11 06:27:08 字數 1203 閱讀 2127

copy與mutablecopy都是深拷貝*方法,但在使用過程中會有陷阱,因為使用copy拷貝的物件,實際指向的是乙個不可變物件;而是用mutablecopy拷貝的,實際上是乙個可變物件。

*(深拷貝:對物件內容進行複製,修改原物件對本物件無影響;淺拷貝:對物件指標進行複製,修改源物件,本物件會更改)

(1.)如下,這一段**,雖然array2被宣告為乙個nsmutablearray(可變陣列),但使用了copy方法進行拷貝,所以實際上array2所指向的是乙個可變陣列;雖然通過nsmutabarray宣告過後可以呼叫removeobjectatindex:方法,但因實際上是不可變陣列在呼叫,所以執行結果會奔潰報錯

(2.)如下,在這一段**中,我做了修改,使array2宣告為乙個不可變陣列,即無法再呼叫removeobjectatindex:方法,但array2使用mutablecopy進行複製,使得array2最終所指向的是乙個可變陣列。

深入物件的copy和mutableCopy

深入理解copy和mutablecopy必須要先理解堆 heap 和棧 stack 的區別,以下鏈結來自stack overflow的詳細解答。簡要的一句話就是 物件儲存在堆中,該物件在堆中便有了乙個記憶體位址,該位址屬於棧中的乙個變數 指標 這個變數在棧中也占有一段記憶體。對於不可變物件copy是...

copy模組中的copy與deepcopy的區別

每空閒下來,就覺得以前寫的部落格很low.也許現在也很low 好吧就當公升級版的low吧 如果要了解copy與deepcopy的區別,就需要了解python的儲存機制 python在賦值會在記憶體裡開闢乙個空間來存放值這就叫 記憶體位址 同時會開闢乙個空間來存放名字叫命名,在資料相同長度在一定範圍 ...

關於python深copy與淺copy的一點理解

一直對python深copy和淺copy似懂非懂的狀態,看了這篇文章,覺得自己懂了很多,給各位參考!出處 import copy a 1 不可變資料型別 copy a copy.copy a print id a id copy a 記憶體位址相同 a 1,2 可變資料型別 copy a copy....