zoukankan      html  css  js  c++  java
  • 关于python的深拷贝和浅拷贝

    写类函数的时候出了一个错,原代码写在这里:

    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]
  • 相关阅读:
    正则表达式(RegExp)
    文本处理工具(cut,sort,tr,grep等)
    权限和ACL练习题
    访问控制列表ACL
    权限和ACL访问控制-02-特殊权限
    数据库的高级操作
    数据表三范式&范式理论
    数据表之间的关系
    数据表的列类型
    修改表结构
  • 原文地址:https://www.cnblogs.com/xym4869/p/11126163.html
Copyright © 2011-2022 走看看