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)
上一篇 2022年7月30日 上午11:16
下一篇 2022年7月30日 上午11:36


相关推荐

  • 三十七、缓存注解@Cacheable、@CacheEvict、@CachePut详解

    三十七、缓存注解@Cacheable、@CacheEvict、@CachePut详解nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp 缓存注解 Cacheable CacheEvict CachePut 详解一 Cacheable 用法详解 1 用在哪里 nbsp nbsp nbsp nbsp 用在方法或者类上 2 这两种用法有什么区别 nbsp nbsp nbsp nbsp 用

    2026年3月19日
    2
  • js获取当前系统时间

    js获取当前系统时间js获取当前年,月,日,时分秒,季度,星期几

    2022年10月18日
    4
  • mybatis和hibernate的以及jpa区别_hibernate sql

    mybatis和hibernate的以及jpa区别_hibernate sql1简单简介  1.1  Hibernate框架     Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,建立对象与数据库表的映射。是一个全自动的、完全面向对象的持久层框架。  1.2  Mybatis框架    Mybatis是一个开源对象关系映射框架,原名:ibatis,2010年由

    2025年10月19日
    7
  • eclipse javadoc快捷键_mac系统截图快捷键

    eclipse javadoc快捷键_mac系统截图快捷键Mac下EclipseJava快捷键

    2025年6月22日
    4
  • 谷歌的发明者(天才纨绔)

    导读:本文为《金融时报》网站发表的一篇人物特写,文章的主角是GoogleChromeV8引擎的开发者拉斯巴克(LarsBak)。他是一个编程天才,却远离计算机世界的核心,在丹麦为Google工作。LarsBak在他的农场远离计算机世界核心奥尔胡斯(Aarhus)是丹麦第二大城市,也是日德兰半岛(Jutland)的非正式首府。在该市郊外5英里的地方,有一座改造过的农舍。里面有宽敞的木地

    2022年4月16日
    54
  • 0xc000007b的解决办法(续)「建议收藏」

    最后更新:2019-3-23请大家首先确定已经按照原文的方法及步骤尝试过,但是还是没有解决问题再来看这篇文章。如果你还没有看过原文,请先看原文:http://blog.csdn.net/VBcom/article/details/6070705看到这里的朋友,应该是看了原文但是没有解决问题。其实这个问题基本上就是由DirectX引起,但是…

    2022年4月15日
    159

发表回复

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

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