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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java线程池参数_线程池参数的合理设置

    java线程池参数_线程池参数的合理设置一:线程池参数简介#E*^.|0X*J(e,|4p!P,^6n-d’U/UThreadPoolExecutor类可设置的参数主要有:Y4~${7r*c.w7?corePoolSize:核心线程)o4N;k;j3w)f-J”^0v1.核心线程会一直存活,及时没有任务需要执行*I8V!t#[%e2.当线程数小于核心线程数时,即使有线程…

    2022年6月6日
    102
  • Fork/Join框架基本使用[通俗易懂]

    1.概述ava.util.concurrent.ForkJoinPool由Java大师DougLea主持编写,它可以将一个大的任务拆分成多个子任务进行并行处理,最后将子任务结果合并成最后的计算结果,并进行输出。本文中对Fork/Join框架的讲解,基于JDK1.8+中的Fork/Join框架实现,参考的Fork/Join框架主要源代码也基于JDK1.8+。这几篇文章将试图解释Fork/…

    2022年4月5日
    43
  • 美国网件对KRACK WPA2安全漏洞做出回应:表示正积极跟进修复[通俗易懂]

    美国网件对KRACK WPA2安全漏洞做出回应:表示正积极跟进修复[通俗易懂]NETGEAR美国网件意识到最近公布的安全漏洞KRACK,它利用了WPA2(WiFi保护访问II)中的安全漏洞。美国网件现正在积极跟进修复,已更新了多个产品的修复程序,请浏览美国网件官方网站(https://kb.netgear.com/000049498/Security-Advisory-for-WPA-2-Vulnerabilities-PSV-2017-2826-PSV-2017-2836…

    2022年5月29日
    38
  • Jenkins(2)docker容器中安装python3[通俗易懂]

    Jenkins(2)docker容器中安装python3[通俗易懂]前言使用docker安装jenkins环境,jenkins构建的workspace目录默认是在容器里面构建的,如果我们想执行python3的代码,需进容器内部安装python3的环境。进jenki

    2022年7月28日
    3
  • 腾讯群关系数据泄漏下载什么软件_云和数据/和华为之间的关系

    腾讯群关系数据泄漏下载什么软件_云和数据/和华为之间的关系腾讯群关系数据泄漏(可根据QQ号获得该人姓名经历等详细信息),外界已经有下载地址了,迅雷上就可以看到很多用户数据泄漏,可能是早期的漏洞被利用抓取的,可以根据QQ查一个人的姓名,年龄,关系网甚至从业经历等等

    2022年9月1日
    0
  • 菜鸟级入门学习maven的使用,很实用的入门教程

    菜鸟级入门学习maven的使用,很实用的入门教程一、前言       早就知道maven在java项目的管理方面名声显赫,于是就想着学习掌握之,于是查阅了大量文档。发现这些文档的作者都是java的大腕,大多都是站在掌握了一定maven基础的角度上进行介绍,让我这初学者看的云里雾里不知所云。于是又去查看maven的官方网站,总算是有所了解,但一旦动手实际操作却又雾里看花。唉,没办法,就只有一遍一遍的动手尝试,经过种种磨难总算是

    2022年9月3日
    1

发表回复

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

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