Python深浅拷贝!
Python深浅拷贝!
今天博主跟大家聊一聊如何使用Python深浅拷贝!不喜勿喷,如有建议欢迎补充、讨论!
关于安装和汉化可以观看博主的这篇文章《下载安装及汉化 》以及Python系列:windows10配置Python3.0开发环境!,安装完毕重启VsCode!以及VSCode配置Python开发环境!
Come on!深浅拷贝
1. 浅拷贝:
在了解深浅拷贝时,我们先看一个拷贝列表的例子:
'''
@name: Sunny Chen
@test: test font
@msg: 这是由Sunny Chen创建.
@param:
@return:
'''ls1=["Mr_Chen","Sunny",[1,2,3]]
ls2=ls1.copy() #浅拷贝
# print(ls2)
#修改列表中的不可变数据类型,ls2变,ls1不变
ls2[0]="xiaojia"
print(ls1,ls2)
#输出为:['Mr_Chen', 'Sunny', [1, 2, 3]] ['xiaojia', 'Sunny', [1, 2, 3]]#修改列表中的可变数据类型,ls2变,ls1也变
ls2[2][0]=6666
print(ls1,ls2)
#输出为:['Mr_Chen', 'Sunny', [6666, 2, 3]] ['xiaojia', 'Sunny', [6666, 2, 3]]
从上述例子中我们可以知道,对于浅拷贝,由ls1拷贝成ls2,当修改ls2中的不可变数据类型时,s1不发生变化;而当修改ls2中的可变数据类型是,s2则发生改变。
这是由于:浅拷贝–>拷贝的仅仅是原列表以及原列表元素中内存指针,故ls2中的不可变数据类型发生改变时,其内存指针也发生了改变,则当ls2[0]发生改变时,其内存指针发生改变,指向的不再存储"little-five"的内存空间,而是存放"xiaowu"的内存空间。故ls1不受影响。而当修改ls2中可变数据类型时,修改列表[1,2,3]中的元素时,该列表[1,2,3]的内存地址并不发生改变,故ls1和ls2的内存指针均指向该列表[1,2,3],故ls2发生该表,ls1也跟着改变。从下面例子可以看出可变数据类型和不可变数据类型的区别:
'''
@name: Sunny Chen
@test: test font
@msg: 这是由Sunny Chen创建.
@param:
@return:
'''#当修改不可变数据类型时,其内存指针发生改变
name="Sunny"
print(id(name)) #2351401446384
name="Mr_Chen"
print(id(name)) #2351401447024#当修改可变数据类型,其内存指针不发生改变
lis=["zhangsan","lisi","wangwu"]
print(id(lis)) #2351401111048
lis[2]="wangmazi"
print(id(lis)) #2351401111048
我们也可以从下图更好的理解浅拷贝:
修改数据前:
修改数据后:
2. 深拷贝
'''
@name: Sunny Chen
@test: test font
@msg: 这是由Sunny Chen创建.
@param:
@return:
'''
import copy #导入拷贝模块
ls3=["zhangsan","lis","wnagwu",[1,2,3]]
#ls5=copy.copy(li3) #浅拷贝
ls4=copy.deepcopy(ls3) #深拷贝
print(ls4) ls4[0]="Mr_ChenYongJia"
print(ls3,ls4) #输出为:['zhangsan', 'lis', 'wnagwu', [1, 2, 3]] ['Mr_ChenYongJia', 'lis', 'wnagwu', [1, 2, 3]]
ls4[3][0]=666
print(ls3,ls4) #输出为:['zhangsan', 'lis', 'wnagwu', [1, 2, 3]] ['Mr_ChenYongJia', 'lis', 'wnagwu', [666, 2, 3]]
从上述例子可以看出,ls3与ls4再无任何关联,这是由于ls4拷贝过来时,其拷贝的不止内存指针,同时还创建新的内存空间,并将数据拷贝至新的内存空间。故新的内存指针指向新的内存空间。
到这里:Python深浅拷贝!分享完毕了,快去试试吧!
最后
更多参考精彩博文请看这里:陈永佳的博客
喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!
Python深浅拷贝!相关推荐
- python小学生能学嘛_小学生都能学会的python(深浅拷贝)
小学生都能学会的python(深浅拷贝) join() 把列表中的每一项用字符串拼接起来 # lst = ["汪峰", "吴君如", "李嘉欣&quo ...
- python深拷贝实现原理_从底层剖析Python深浅拷贝
拷贝的用途 拷贝就是copy,目的在于复制出一份一模一样的数据.使用相同的算法对于产生的数据有多种截然不同的用途时就可以使用copy技术,将copy出的各种副本去做各种不同的操作. 值得一提的是绝大部 ...
- python深浅拷贝应用_python之深浅拷贝
对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. print(id(n2)) 对于字典.元组.列表而言,进行赋值.浅拷贝和深拷贝时,其内存地址的变化是不同的. ...
- python 深浅拷贝
深浅拷贝 (1)赋值运算 l1 = [1,2,3,['barry','alex']] l2 = l1l1[0] = 111 print(l1) # [111, 2, 3, ['barry', 'ale ...
- python深浅拷贝 面试_python基础-深浅拷贝
深拷贝与浅拷贝 总结: # 浅拷贝:list dict: 嵌套的可变数据类型是同一个 # 深拷贝:list dict: 嵌套的不可变数据类型彼此独立 浅拷贝 # 个人理解: # 在内存中重新创建一个空 ...
- python深浅拷贝的底层理解_理解python中的深拷贝与浅拷贝
python中浅拷贝和深拷贝的区别如下: 1. copy.copy 等价于切片[:] 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象.2个列表是不同的,但是子列表指向的仍然是同一个地址 2. co ...
- python深浅拷贝 面试_Python面试宝典之基础篇-02
原标题:Python面试宝典之基础篇-02 我觉得你如果正在找工作,我的Python面试宝典几期教程,你一定得花时间看完了! 题目006:说说Python中的浅拷贝和深拷贝. 点评:这个题目本身出现的 ...
- python深浅拷贝 面试_[面试题二]百度资深面试官:python赋值、浅拷贝与深拷贝
内存管理相关的面试一直是面试中的重点考察内容.赋值.深拷贝与浅拷贝是日常编码工作中,需要时常关注的知识点.不小心可是会写出bug哦- 赋值 先来看一段代码,下面两段代码的输出结果会是什么呢? # ca ...
- python 深浅拷贝案例_python-浅拷贝、深拷贝实例以及讲解
# 1.浅拷贝 与 深拷贝 列表 import copy a = [11, 22] b = [33, 44] c = [a, b] d = c e = copy.copy(c) # 浅拷贝 f = c ...
最新文章
- java 的继承_关于java中的继承
- pku1985 Cow Marathon
- power bi tutorial within Unilever
- c#实现分组服务器,单一无重复生成ID
- Introduction to Cryto Crptocurrencies Lecture 1
- android 局域网邻居,局域网内无邻居 它们去哪儿了?
- 16福师计算机应用基础在线作业,16春季福师《计算机应用基础》在线作业二.doc...
- 在nocdb转pdb的时候遇到小bug
- 【英语学习】【WOTD】condone 释义/词源/示例
- GOF23种设计模式
- 同济保研计算机,同济大学保研率28%,保研高校前四:复旦、北大、交大、清华...
- 兄弟9055cdn硒鼓清零_dcp—9020cdn硒鼓怎么清零
- 盘点常见元器件级性识别方法
- linux sdl windows.h,SDL入门教程(十):1、多语言支持,Win32下的GetText
- Python 定时获取卫星图像做为桌面背景
- Hadoop Java对应版本号
- 典型分布式计算技术的分析和比较
- 一、python入门整体快速学习
- 2017.05.05FreeCodeCamp前端编程之Javascript实现laohuji
- 港科夜闻丨香港科大与迅雷建立联合实验室,共同推动区块链科技创新与应用...
热门文章
- 使用 PulseSensor 脉搏传感器测量心率之二:数据采集及保存( ProcessingPython)
- html 3D立体多形态旋转音乐相册 | 2022都结束了,还不快给女神制作一个特殊的纪念相册
- mysql 自定义函数报错_Mysql自定义函数报错解决方法
- html标签a+hover事件,触发a标签hover事件,如何在元素底部显示蓝色底块_html/css_WEB-ITnose...
- xen vm安装_如何使用Xen-Phoenix(Bash)免费还原Citrix-Xen VM
- 【JS】JavaScript快速介绍
- 以太网 VLAN的5种划分方式(基于端口、基于MAC地址、基于IP子网、基于协议、基于策略)介绍与基础配置命令
- K8S部署分布式文件存储minio两种部署方式
- linux tail grep多个,Linux grep、tail命令的混合使用
- C++string类的实现