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

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]

关于python的深拷贝和浅拷贝的更多相关文章

  1. python 中 深拷贝和浅拷贝的理解

    在总结 python 对象和引用的时候,想到其实 对于python的深拷贝和浅拷贝也可以很好对其的进行理解. 在python中,对象的赋值的其实就是对象的引用.也就是说,当创建一个对象,然后赋给另外一 ...

  2. [py]python的深拷贝和浅拷贝

    Python深复制浅复制or深拷贝浅拷贝 简单点说 copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. copy.deepcopy 深拷贝 拷贝对象及其子对象 用一个简单的例子说明 ...

  3. Python中深拷贝与浅拷贝的区别

    转自:http://blog.csdn.net/u014745194/article/details/70271868 定义: 在Python中对象的赋值其实就是对象的引用.当创建一个对象,把它赋值给 ...

  4. python中深拷贝与浅拷贝

    # 1.浅拷贝(复制东西)a = [11,22,33] # 实际上是浅拷贝# 没有把这个变量的值赋进去,而是把另一个变量的地址拿过去了,就叫浅拷贝.b = a # print(id(a))# prin ...

  5. python之深拷贝和浅拷贝

    1.当拷贝的是不可变数据类型(数值.字符串.元组),不管是深拷贝和浅拷贝,都指向的是同一地址: 2.当拷贝的对象是可变数据类型(列表.字典): (1)当浅拷贝的对象中无复杂子对象,原来值的改变不会影响 ...

  6. python中深拷贝和浅拷贝

    python中所谓浅拷贝就是对引用的拷贝,所谓深拷贝就是对对象的资源的拷贝. 首先,对赋值操作我们要有以下认识: 赋值是将一个对象的地址赋值给一个变量,让变量指向该地址( 旧瓶装旧酒 ). 修改不可变 ...

  7. python 中深拷贝和浅拷贝的区别

    通俗的理解,浅就是外面,深就是里面.浅拷贝的意思就是只拷贝外面的一层,深拷贝就是拷贝的里面的所有. 看两段代码: 元组: #!/usr/bin/env/python # -*-coding:utf-8 ...

  8. 关于Python中深拷贝与浅拷贝的理解(一)---概念

    import copy a = [1, 2, 3, 4, ['a', 'b']] #原始对象 b = a #赋值,传对象的引用 c = copy.copy(a) #对象拷贝,浅拷贝 d = copy. ...

  9. Python中深拷贝与浅拷贝区别

    浅拷贝, list值是可变的,str值不可变,只能重新赋值 a=b=c='wjx'print(a,b,c)c= 'jmy'#重新赋值了,所以内存分配了新的地址print(a,b,c)print(id( ...

  10. Python的深拷贝、浅拷贝

    浅拷贝 定义:浅拷贝只是对另外一个变量的内存地址的拷贝,这两个变量指向同一个内存地址的变量值. 浅拷贝的特点: 公用一个值: 这两个变量的内存地址一样: 对其中一个变量的值改变,另外一个变量的值也会改 ...

随机推荐

  1. Error creating bean with name 'XXX' defined in file

    这个错误是我在之前操作时,错将另一个dubbo服务器也加载到了该dubbo服务器上(pom.xml),所以出现了Error creating bean with name 'XXX' defined ...

  2. Workerman简单开发示例实践(二)

    一.在Workerman目录下创建ws_test.php,如下图,并输入如下代码: <?php use Workerman\Worker; require_once __DIR__ . '/Au ...

  3. 企业如何避免错误决策?APS系统帮你忙

    一家企业不论什么事情都是有一定的决策者们,企业的决策者是对整个企业的兴衰成败主宰者主要责任. 战略一词它源于军事,是指为了获得有利的信息而进行的部署计划,那么现在战略合作也是被广泛的应用到商业的以及生 ...

  4. Python爬虫系列:五、正则表达式

    1.了解正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑. 正则表达式 ...

  5. linux备份mysql文件并恢复的脚本,以及其中出现的错误:ERROR: ASCII '\0' appeared in the statement

    首先是在网上找了一下教程,代码很简单 #!/bin/bash folder=~/test time=`date +%Y%m%d` mysqldump -u user -p pwd -hlocalhos ...

  6. linux档案和目录管理(后续)

    资料来自鸟哥的linux私房菜 四:档案和目录的预设权限和隐藏权限 umask:预设权限,相比与chomd的4,2,1权限,档案满分为666,目录满分为777,umask可以预设消除部分权限,比如一个 ...

  7. Linux文本编译工具VIM详解

    Linux文本编译工具VIM详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.VIM概述 1>.vim简介 >.vi: 全称Visual editor,即文本编辑 ...

  8. X509IncludeOption 枚举

    X509IncludeOption 枚举 指定 X.509 数据应包括 X.509 证书链的哪些内容. EndCertOnly 2 X.509 链信息中仅包括最终证书. ExcludeRoot 1 包 ...

  9. 微信小程序~自定义属性设置和获取(data-)

    自定义属性语法以data-开头: <button data-info="自定义数据" bindtap="testClick">自定义属性测试< ...

  10. winafl 源码分析

    前言 winafl 是 afl 在 windows 的移植版, winafl 使用 dynamorio 来统计代码覆盖率,并且使用共享内存的方式让 fuzzer 知道每个测试样本的覆盖率信息.本文主要 ...