Python深拷贝与浅拷贝_python 赋值

Python深拷贝与浅拷贝_python 赋值深拷贝和浅拷贝不管对于浅拷贝、还是深拷贝,针对不可变对象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/165841.html原文链接:https://javaforall.net

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


相关推荐

  • mysql数据库存储过程讲解与实例分析_数据库存储过程的优点

    mysql数据库存储过程讲解与实例分析_数据库存储过程的优点存储过程简介SQL语句需要先编译然后执行,而存储过程(StoredProcedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和控制结构组成。当想要在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过…

    2022年10月25日
    0
  • win7下,令人头疼的 classpnp.sys (附带:安装系统时蓝屏;0x0000007b)。[通俗易懂]

    win7下,令人头疼的 classpnp.sys (附带:安装系统时蓝屏;0x0000007b)。[通俗易懂]前言:1.今天到单位,打开笔记本,发现启动后,程序报appcrash错误。于是重启,使用安全模式进入,发现启动中停在classpnp.sys上,然后程序就再也不往下走了。安全模式都进入不了系统,我还是第一次遇到!!万恶的win7。——————————————-

    2022年7月18日
    20
  • HTML/CSS 常见面试题汇总

    HTML/CSS 常见面试题汇总HTML面试题1、<image>标签上title属性与alt属性的区别是什么?alt属性是为了给那些不能看到你文档中图像的浏览者提供文字说明的。且长度必须少于100个英文字符或者用户必须保证替换文字尽可能的短。这包括那些使用本来就不支持图像显示或者图像显示被关闭的浏览器的用户,视觉障碍的用户和使用屏幕阅读器的用户等。title属性为设置该属性的元素提供建议性的信息。使用ti…

    2022年5月31日
    30
  • 网络安全之KALI渗透手机、获取目标的精确位置

    网络安全之KALI渗透手机、获取目标的精确位置

    2021年6月1日
    112
  • pycharm R语言_pycharm安装后无解释器

    pycharm R语言_pycharm安装后无解释器最近被网上的一些R语言做出的图迷住,遂突发奇想学习R语言。按照教程装好了R语言解释器与Rstudio后,才得知pycharm中有R语言的插件,安装后可以在pycharm中写R语言。pycharm安装R语言插件打开File|Settings|Plugins,在搜索框里搜索RLanguageSupport,安装就可以了。安装结束后重启pycharm,再进入File|Settin…

    2022年8月28日
    1
  • Linux 的命令 ls 只列出部分目录或是文件

    Linux 的命令 ls 只列出部分目录或是文件

    2022年2月11日
    79

发表回复

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

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