Python-深拷贝-浅拷贝-时间消耗
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-深拷贝-浅拷贝-时间消耗相关推荐
- python深拷贝和浅拷贝的使用场景_Python深拷贝和浅拷贝使用方法
Python深拷贝和浅拷贝使用方法 发布时间:2020-06-06 16:52:01 来源:亿速云 阅读:182 这篇文章运用了实例代码展示Python深拷贝和浅拷贝使用方法,代码非常详细,可供感兴趣 ...
- python赋值浅拷贝和深拷贝的区别_python赋值、浅拷贝、深拷贝区别
在写Python过程中,经常会遇到对象的拷贝,如果不理解浅拷贝和深拷贝的概念,你的代码就可能出现一些问题.所以,在这里按个人的理解谈谈它们之间的区别. 一.赋值(assignment) 在<Py ...
- python中浅拷贝与深拷贝
参考链接 1. 引用 https://blog.csdn.net/qq_38556217/article/details/103002827 2. Python中变量在内存的存储与地址变化详解(深浅拷 ...
- python深拷贝_python 深拷贝与浅拷贝的区别
python中浅拷贝和深拷贝的区别如下: 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deepcopy 深拷贝 拷贝对象及其子对象 如果拷贝对象是一个 ...
- Python中浅拷贝和深拷贝的理解与研究
Python中浅拷贝和深拷贝的理解与研究 单层浅拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) ...
- 彻底理解Python中浅拷贝和深拷贝的区别
目录 前言 1. 浅拷贝和深拷贝的概念 2. is和==的区别 3. 赋值操作 4. copy模块里面的copy()方法 5. copy模块里面的deepcopy()方法 6.字典自带的copy方法 ...
- python中浅拷贝和深拷贝的区别_Python中浅拷贝和深拷贝的区别
Python中浅拷贝和深拷贝的区别 浅拷贝和深拷贝示意图 如上图,简单点说 1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象. 2. copy.deepcopy 深拷贝 拷贝 ...
- 【转载】图解 Python 深拷贝和浅拷贝
伯乐在线 > Python - 伯乐在线 > 所有文章 > 基础知识 > 图解 Python 深拷贝和浅拷贝 图解 Python 深拷贝和浅拷贝 2015/09/28 · 基础 ...
- Python中浅拷贝和深拷贝的理解与研究 1
Python中浅拷贝和深拷贝的理解与研究 单层浅拷贝 import copy a = 1 # 不可变数据类型 copy_a = copy.copy(a) print(id(a),id(copy_a)) ...
最新文章
- 2014-02-26_javascript_event
- Linux 安装Boost
- java中class对象的理解 讲得相当不错 很接地气 引用下
- C#中用schema验证xml的合法性
- 两个开发源码加密库openssl和cryptlib的比较
- iOS 事件传递响应链
- 干货!这可能是最全的IntelliJ IDEA For Mac快捷键说明,建议收藏!
- 2014年计算机二级c语言试题,2014年计算机二级C语言模拟试题及答案(3)
- 除了速度与激情 领克01带给我另一种有关生活方式的想象
- NYOJ760-See LCS again,有技巧的暴力!
- java中方法体的作用
- umpy知识点补充:np.vstack()np.hstack()
- broadcom linux网卡驱动下载,Broadcom Bcm57xx芯片网卡驱动Linux下安装方法
- Linux搭建Nacos及Nacos集群
- 用VS新建多层架构时引用第三方dll 时清理解决方案时,放bin文件夹下的bll被清空问题
- 提取LSV中的高程数据在CAD中进行道路的方案设计流程
- 转行学习java自学好还是去培训学校学习好?系统学习路线推荐
- 解决ECharts中使用tooltip时鼠标移入抖动问题
- 机房温度可视化:物联网下的数据中心环境运维新方式
- warning: pointer targets in passing argument 3 of ‘accept’ differ in signedness