python进阶(6)深拷贝和浅拷贝[通俗易懂]

python进阶(6)深拷贝和浅拷贝[通俗易懂]深拷贝和浅拷贝不管对于浅拷贝、还是深拷贝,针对不可变对象str、int、tuple(有点特殊)、boolean,它的内存地址是不变的,拷贝的仅仅是值importcopya=1b=co

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

深拷贝和浅拷贝

不管对于浅拷贝、还是深拷贝,针对不可变对象str、int、tuple(有点特殊)、boolean,它的内存地址是不变的,拷贝的仅仅是值

import copy


a = 1
b = copy.copy(a)  # 浅拷贝a
c = copy.deepcopy(a)  # 深拷贝a
print(a is b)
print(a is c)

>>> True
>>> True

is比较的是二者的内存地址是否相同

 

浅拷贝

浅拷贝只拷贝可变对象的第一层,如果可变对象中还有可变的对象,那么第二层拷贝不到,拷贝不到就是说,第二层的内存地址是共用的,都是指向同一片内存地址

import copy


a = [1, 2, [3, 4]]
b = copy.copy(a)
print(a is b)
print(a[2] is b[2])

>>> a的内存地址 140369750660592
>>> b的内存地址 140369750677376
>>> False
>>> a[2]的内存地址 140369750677056
>>> b[2]的内存地址 140369750677056
>>> True

浅拷贝只拷贝第一层,所以b拷贝出来的内存地址是与a不同的,
但因为浅拷贝只能拷贝第一层,所以b[2]这个列表拷贝不到,指向的内存地址仍然是a[2]的内存地址

 

深拷贝

深拷贝对于可变的对象,全部拷贝下来,全部都开辟一片新的内存地址

import copy


a = [1, 2, [3, 4]]
b = copy.deepcopy(a)
print('a的内存地址', id(a))
print('b的内存地址', id(b))
print(a is b)
print('a[2]的内存地址', id(a[2]))
print('b[2]的内存地址', id(b[2]))
print(a[2] is b[2])

>>> a的内存地址 140312626337184
>>> b的内存地址 140312626353968
>>> False
>>> a[2]的内存地址 140312626353648
>>> b[2]的内存地址 140312626337264
>>> False
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/165162.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java嵌套条件运算符_java条件运算符的嵌套使用「建议收藏」

    java嵌套条件运算符_java条件运算符的嵌套使用「建议收藏」对于java条件运算符的嵌套使用你熟悉吗?下面要给大家带来的就是和这方面有关的编程题,一起来了解一下。一、题目学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示注:利用条件运算符的嵌套来完成这道题目二、思路(a>b)?a:b这是条件运算符的基本例子三、代码实现publicclassProg5{publicstaticvoidmain(Strin…

  • 分形之谢尔宾斯基(Sierpinski)地毯

    分形之谢尔宾斯基(Sierpinski)地毯前面讲了谢尔宾斯基三角形,和这一节的将把三角形变为正方形,即谢尔宾斯基地毯,它是由瓦茨瓦夫·谢尔宾斯基于1916年提出的一种分形,是自相似集的一种。谢尔宾斯基地毯的构造与谢尔宾斯基三角形相似

  • 一比一还原axios源码(五)—— 拦截器「建议收藏」

    上一篇,我们扩展了Axios,构建了一个Axios类,然后通过这个Axios工厂类,创建真正的axios实例。那么今天,我们来实现下Axios的拦截器也就是interceptors。我们来简单看下Ax

  • Linux vi命令编辑文件「建议收藏」

    Linux vi命令编辑文件「建议收藏」进入vi编辑模式:vi文件名进入编辑:按i键编辑完按Esc退出编辑模式此时输入::wq保存后退出:wq!强制保存后退出:w保存但不退出:q不保存并退出:q!不保存并强制退出(比如报错时E212:Can’topenfileforwriting)…

  • 常用公共数据集[通俗易懂]

    常用公共数据集[通俗易懂]原文链接:http://homepages.inf.ed.ac.uk/rbf/CVonline/Imagedbase.htmCVonline:图像数据库(Google直译的结果,希望对大家有帮助)按主题索引行动数据库属性识别自主驾驶生物/医药相机校准脸和眼/虹膜数据库指纹一般图像一般RGBD和深度数据集一般视频手,掌握,手动和手势数据库图像,视频和形状数据库检索对象数据库人(静),人体姿势人员检测…

  • 此工作站和主域直接信任失败_依赖服务或组无法启动win10

    此工作站和主域直接信任失败_依赖服务或组无法启动win10背景:此工作站和主域的信任关系失败(客户机连接服务器)。问题问题分析如果不能远程连接到服务器,我们也不能ping通服务器,有可能是我们的服务器脱域解决方案:一.重启;用这种方法不行二.重加域1.重新退出域;2.重新加入域;以下则表示成功…

    2022年10月19日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号