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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/165496.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 电脑蓝屏报错0x00000006怎么办?蓝屏报错0x00000006解决方法

    电脑蓝屏报错0x00000006怎么办?蓝屏报错0x00000006解决方法1.首先进入系统,按键盘上的win+r组合键打开“运行”窗口,在运行框中输入msconfig并回车。2.在“系统配置”窗口中,将“加载启动项”选项前的勾去除。3.切换到服务栏界面,勾选“隐藏所有Microsoft服务”,然后点击“全部禁用”。4.接着切换到“启动”栏界面中,点击“全部禁用”,然后点击确定即可。…

    2022年5月14日
    85
  • UART串口协议_UART通信协议

    UART串口协议_UART通信协议UART串口协议

    2025年7月1日
    2
  • 计算机网络bs/cs区别_bs嵌入cs

    计算机网络bs/cs区别_bs嵌入csCS什么是CS?CS(Client/Server)指客户端、服务器架构模式。客户端需要安装专用的客户端软件。CS的优点、特点1.交互性强2.存取模式安全3.网络通信量低4.响应速度快5.利于处理大量数据●能充分发挥客户端PC的处理能力,很多工作可以在客户端处理后再提交给服务器,所以CS客户端响应速度快。●操作界面漂亮、形式多样,可以充分满足客户自身的个性化要求。●C/S结构的管理信息系统…

    2022年10月17日
    3
  • java的大数运算(高新技术产品有哪些)

    java的大数运算(高新技术产品有哪些)本篇博客主要介绍Java常用类库之大数操作,主要是BigInteger和BigDecimal的API学习。之后介绍华为的一道历年真题,十六进制转换成十进制,我们可以看到题目中给我们设置的陷阱,以及如何解决它!

    2022年4月18日
    55
  • PhpSpreadsheet_php读取文件内容

    PhpSpreadsheet_php读取文件内容·1、实例化Spreadsheet对象<?phpnamespaceapp//给类文件的命名空间起个别名usePhpOffice\PhpSpreadsheet\Spreadsheet;//Xlsx类保存文件功能类usePhpOffice\PhpSpreadsheet\Writer\Xlsx;//实例化Spreadsheet对象$spreadsheet=newSpreadsheet();2、Spreadsh

    2022年9月17日
    2
  • Android多线程研究(4)——从一道面试题说起

    Android多线程研究(4)——从一道面试题说起

    2021年11月28日
    50

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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