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/164959.html原文链接:https://javaforall.net

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


相关推荐

  • layui弹出层html页面,layui弹出层

    layui弹出层html页面,layui弹出层利用layui框架layer部分执行的弹出层,这样比起普通alert的弹出层更美观首先,写一个按钮点击试试js部分$(document).ready(function(){$(‘.btn’).on(‘click’,function(){layer.confirm(‘你好吗?’,{btn:[‘好’,’不好’]},function(){layer.msg(‘hao’,{ico…

    2022年6月14日
    46
  • Web前端开发中的MCRV模式(转)

    Web前端开发中的MCRV模式(转)

    2021年7月9日
    89
  • phpmyadmin端口多少(iis配置改端口号)

    当前使用phpmyadmin版本号为phpMyAdmin-4.7.5mysql默认端口3306,如果你当前mysql不是3306,则如何通过phpmyadmin连接呢?网上文章都是要修改phpmyadmin目录下libraries下配置文件config.default.php文件的$cfg[‘Servers’][$i][‘port’]=”参数,…

    2022年4月10日
    46
  • ER图是什么?「建议收藏」

    ER图是什么?「建议收藏」ER图分为实体、属性、关系三个核心部分。实体是长方形体现,而属性则是椭圆形,关系为菱形。ER图的实体(entity)即数据模型中的数据对象,例如人、学生、音乐都可以作为一个数据对象,用长方体来表示,每个实体都有自己的实体成员(entitymember)或者说实体对象(entityinstance),例如学生实体里包括张三、李四等,实体成员(entitymember)/实体实例(entityinstance)不需要出现在ER图中。ER图的属性(attribute)即数据对象所具有的属

    2022年9月23日
    0
  • hi3798mv300是什么手机_华为海思电视芯片hi3798mv300 硬件参数如何?

    hi3798mv300是什么手机_华为海思电视芯片hi3798mv300 硬件参数如何?这个是MV300的参数http://www.hisilicon.com.cn/-/media/Hisilicon/pdf/STB/Hi3798MV300.pdf​www.hisilicon.com.cn这个是MV200的参数http://www.hisilicon.com/-/media/Hisilicon/pdf/STB/Hi3798MV200.pdf​www.hisilicon.com两者对比…

    2022年6月22日
    138
  • Redis的持久化-RDB

    Redis的持久化-RDB

    2022年2月12日
    46

发表回复

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

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