關於python的深拷貝和淺拷貝

2022-06-24 10:24:09 字數 1322 閱讀 8350

寫類函式的時候出了乙個錯,原**寫在這裡:

def

update(self, wm, vm, ts, pos, vn, att):

#上一時刻位置,速度

pos_pre =pos

self.pos = pos

vn_pre =vn

self.vn = vn

#vn更新

self.vn = self.vn +self.delta_vn

#pos更新

self.pos[0, 0], self.pos[1, 0] =q2pos(self.qne)

self.pos[2, 0] = self.pos[2, 0] - mid_vn[2, 0] * ts

這樣寫的時候,pos_pre會隨著self.pos的改變而改變,vn_pre不會隨著self.vn改變。

原因:在開闢空間時,同時將pos_pre和self.pos指向pos,將vn_pre和self.vn指向vn,但在修改vn時,是重建陣列,即重新建立了乙個資料空間,但在修改pos時,是在原陣列空間進行修改。

舉個例子:

in [2]: a = [1,2,3]

in [3]: def

test(a):

...: c =a

...: d =a

...: d = [2,3,4]

...:

return

c ...:

in [4]: test(a)

out[4]: [1, 2, 3]

in [6]: def

test2(a):

...: c =a

...: d =a

...: d[0] = 5...:

return

c ...:

in [7]: test2(a)

out[7]: [5, 2, 3]

如果實現空間獨立,使用深拷貝,每個陣列開闢乙個新的空間:

in [1]: import

copy

in [2]: a = [1,2,3]

in [3]: def

test3(a):

...: c =copy.deepcopy(a)

...: d =copy.deepcopy(a)

...: d[0] = 5...:

return

c ...:

in [4]: test3(a)

out[4]: [1, 2, 3]

前端的深拷貝和淺拷貝 前端面試 深拷貝和淺拷貝

面試題目 如何實現對乙個陣列或物件的淺拷貝和深拷貝?wtf,複製還分兩種,第一次遇到這種問題的時候很是無語呢,先來看看一般的答案的理解。淺拷貝是只拷貝一層,深層次的物件級別就只拷貝引用。深拷貝是拷貝多層,每一級別的資料都拷貝出來。也就是說,基本資料型別其實不存在深淺拷貝的問題,只有物件和陣列才存在深...

轉 Python深複製淺複製or深拷貝淺拷貝

copy.copy 淺拷貝 只拷貝父物件,不會拷貝物件的內部的子物件。copy.deepcopy 深拷貝 拷貝物件及其子物件 用乙個簡單的例子說明如下 import copy a 1,2,3,4,a b c b a c copy.copy a d copy.deepcopy a 很容易理解 a是乙個...

關於深拷貝和淺拷貝

以nsstring與nsmutablestring舉例 nsstring str1 xfj nsmutablestring str2 str1 mutablecopy nslog str1,str2 nslog p p str1,str2 輸出結果 xfj xfj123 0x102701068 0x...