numpy中的淺複製和深複製

2022-03-30 06:26:18 字數 1353 閱讀 9466

淺複製:主要有兩種方式,簡單的賦值或者使用檢視(view)

簡單的賦值:其實就是製造了乙個別名,陣列並沒有被copy成新的乙份,當使用其中乙個別名改變陣列值的時候,另乙個別名對應的值一併改變。  

>>>a = np.arange(12)

>>>a

array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])

>>>b = a

>>>b is a

true

>>>b.shape = 3,4

>>>b

array([[ 0, 1, 2, 3],

[ 4, 5, 6, 7],

[ 8, 9, 10, 11]])

>>>a

array([[ 0, 1, 2, 3],

[ 4, 5, 6, 7],

[ 8, 9, 10, 11]])

檢視:就是製造了乙個原陣列的在numpy中定義為view的東西,新檢視的base是原陣列,區別在於新檢視可以和原陣列有不同的shape,但當檢視的值改變,原陣列的值也會發生改變。需要注意的是陣列的切片其實就是生成檢視的過程。如c = a[:],其實就是生成了和a形狀相同的a的view(完全切片)。

>>>a

array([[ 0, 1, 2, 3],

[ 4, 5, 6, 7],

[ 8, 9, 10, 11]])

>>>c = a.view

>>>c is a

false

>>>c.base is a

true

>>>c.shape = 12

>>>c[0] = 520

>>>a

array([[520, 1, 2, 3],

[ 4, 5, 6, 7],

[ 8, 9, 10, 11]])

深複製:就是製作乙份原陣列的copy了。

>>>d = a.copy()

>>>d[0][0] = 1314

>>>d

array([[1314, 1, 2, 3],

[ 4, 5, 6, 7],

[ 8, 9, 10, 11]])

>>>a

array([[ 0, 1, 2, 3],

[ 4, 5, 6, 7],

[ 8, 9, 10, 11]])

淺複製和深複製

在c 中,下面三種物件需要呼叫拷貝建構函式 有時也稱 複製建構函式 1 乙個物件作為函式引數,以值傳遞的方式傳入函式體 全域性函式,傳入的是物件 void g fun resume c 2 乙個物件作為函式返回值,以值傳遞的方式從函式返回 全域性函式 返回的是物件 resume g fun 3 乙個...

深複製和淺複製

以下 是否完全正確,執行可能得到的結果是 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 class a class b b void sayhello b b int main 程式正常執行 程式編譯錯誤 程式崩潰 程式死迴圈 這個程式會直接崩潰 voidsayhello ...

深複製和淺複製

main.m 深複製和淺複製。created by yaomars on 16 4 27.import 建立乙個nsdictionary,並建立可變副本和不可變副本,說下是深複製還是淺複製。int main int argc,const char argv 第三種方式 建立乙個nsdictionar...