寫類函式的時候出了乙個錯,原**寫在這裡:
defupdate(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]: importcopy
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...