1.深浅拷贝差别实验

首先直接上结论:

—–我们寻常意义的复制就是深复制,即将被复制对象完全再复制一遍作为独立的新个体单独存在。所以改变原有被复制对象不会对已经复制出来的新对象产生影响。 
—–而浅复制并不会产生一个独立的对象单独存在,他只是将原有的数据块打上一个新标签,所以当其中一个标签被改变的时候,数据块就会发生变化,另一个标签也会随之改变。这就和我们寻常意义上的复制有所不同了。

对于简单的 object,用 shallow copy 和 deep copy 没区别(这里的简单是指数据里面不存在存在其他数据结构嵌套)

复杂的 object, 如 list 中套着 list 的情况,shallow copy 中的 子list,并未从原 object 真的「独立」出来。也就是说,如果改变原 object 的子 list 中的一个元素,你的 copy 就会跟着一起变。这跟我们直觉上对「复制」的理解不同。

# -*-coding:utf-8 -*-
import copy
a = [1, 2, 3, 4, ['a', 'b']] #原始对象b = a #赋值,传对象的引用
c = copy.copy(a) #对象拷贝,浅拷贝
d = copy.deepcopy(a) #对象拷贝,深拷贝a.append(5) #修改对象a
a[4].append('c') #修改对象a中的['a', 'b']数组对象print 'a = ', a
print 'b = ', b
print 'c = ', c
print 'd = ', d输出结果:
a =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c =  [1, 2, 3, 4, ['a', 'b', 'c']]
d =  [1, 2, 3, 4, ['a', 'b']]

2. Python数据存储

Python 存储变量的方法跟其他 OOP 语言不同。它与其说是把值赋给变量,不如说是给变量建立了一个到具体值的 reference。

当在 Python 中 a = something 应该理解为给 something 贴上了一个标签 a。当再赋值给 a 的时候,就好象把 a 这个标签从原来的 something 上拿下来,贴到其他对象上,建立新的 reference。 这就解释了一些 Python 中可能遇到的诡异情况。

其实这个现象用指针的浅拷贝和深拷贝理解最直观,所谓的浅拷贝相当于多个指针指向同一个资源区,一旦资源区被改变,那么所有指针指向的内容都会发生改变。更危险的是,如果我们释放了其中一个指针,在进行其他指针的释放时,就会造成严重的内存泄漏。

为了避免这种情况,我们自然想到单独建立一块内存空间,对内容进行完全的复制拷贝。

3. Python 为什么比C++慢很多

其实,Python的跨平台性能和运行速度一起来研究就更有意义了。

Python的原代码首先要被翻译成字节码m.pyc,然后现在Python的虚拟机上运行生成可供CPU执行的机器码。

而C++却不一样,C++编译器是直接将源码翻译成机器码供给CPU运行,自然而言,C++的速度更快。

此外,python是一种动态类型,解释型语言,它的值都是存储在分散的对象中,而不是紧密的缓存之中。这意味着编译器在程序执行之前并不知道变量定义的类型。

4.参考资料

《Python从入门到精通》

Python-深拷贝-浅拷贝-时间消耗相关推荐

  1. python深拷贝和浅拷贝的使用场景_Python深拷贝和浅拷贝使用方法

    Python深拷贝和浅拷贝使用方法 发布时间:2020-06-06 16:52:01 来源:亿速云 阅读:182 这篇文章运用了实例代码展示Python深拷贝和浅拷贝使用方法,代码非常详细,可供感兴趣 ...

  2. python赋值浅拷贝和深拷贝的区别_python赋值、浅拷贝、深拷贝区别

    在写Python过程中,经常会遇到对象的拷贝,如果不理解浅拷贝和深拷贝的概念,你的代码就可能出现一些问题.所以,在这里按个人的理解谈谈它们之间的区别. 一.赋值(assignment) 在<Py ...

  3. python中浅拷贝与深拷贝

    参考链接 1. 引用 https://blog.csdn.net/qq_38556217/article/details/103002827 2. Python中变量在内存的存储与地址变化详解(深浅拷 ...

  4. python深拷贝_python 深拷贝与浅拷贝的区别

    python中浅拷贝和深拷贝的区别如下: 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deepcopy 深拷贝 拷贝对象及其子对象 如果拷贝对象是一个 ...

  5. Python中浅拷贝和深拷贝的理解与研究

    Python中浅拷贝和深拷贝的理解与研究 单层浅拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) ...

  6. 彻底理解Python中浅拷贝和深拷贝的区别

    目录 前言 1. 浅拷贝和深拷贝的概念 2. is和==的区别 3. 赋值操作 4. copy模块里面的copy()方法 5. copy模块里面的deepcopy()方法 6.字典自带的copy方法 ...

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

    Python中浅拷贝和深拷贝的区别 浅拷贝和深拷贝示意图 如上图,简单点说 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deepcopy 深拷贝 拷贝 ...

  8. 【转载】图解 Python 深拷贝和浅拷贝

    伯乐在线 > Python - 伯乐在线 > 所有文章 > 基础知识 > 图解 Python 深拷贝和浅拷贝 图解 Python 深拷贝和浅拷贝 2015/09/28 · 基础 ...

  9. Python中浅拷贝和深拷贝的理解与研究 1

    Python中浅拷贝和深拷贝的理解与研究 单层浅拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) ...

最新文章

  1. 2014-02-26_javascript_event
  2. Linux 安装Boost
  3. java中class对象的理解 讲得相当不错 很接地气 引用下
  4. C#中用schema验证xml的合法性
  5. 两个开发源码加密库openssl和cryptlib的比较
  6. iOS 事件传递响应链
  7. 干货!这可能是最全的IntelliJ IDEA For Mac快捷键说明,建议收藏!
  8. 2014年计算机二级c语言试题,2014年计算机二级C语言模拟试题及答案(3)
  9. 除了速度与激情 领克01带给我另一种有关生活方式的想象
  10. NYOJ760-See LCS again,有技巧的暴力!
  11. java中方法体的作用
  12. umpy知识点补充:np.vstack()np.hstack()
  13. broadcom linux网卡驱动下载,Broadcom Bcm57xx芯片网卡驱动Linux下安装方法
  14. Linux搭建Nacos及Nacos集群
  15. 用VS新建多层架构时引用第三方dll 时清理解决方案时,放bin文件夹下的bll被清空问题
  16. 提取LSV中的高程数据在CAD中进行道路的方案设计流程
  17. 转行学习java自学好还是去培训学校学习好?系统学习路线推荐
  18. 解决ECharts中使用tooltip时鼠标移入抖动问题
  19. 机房温度可视化:物联网下的数据中心环境运维新方式
  20. warning: pointer targets in passing argument 3 of ‘accept’ differ in signedness

热门文章

  1. Random类——获取随机数
  2. 7、ReadWriteLock
  3. Android 帧动画何时停止播放
  4. PID1 / 明明的随机数
  5. 欧拉函数和最大公约数的组合应用
  6. NYOJ 914 Yougth的最大化(二分搜索 + 贪心)
  7. git 命令使用技巧
  8. Django 部署(Nginx+uwsgi)
  9. Oracle 查询字段在什么表
  10. 【MOSS】Sharepoint大附件上传