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

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


相关推荐

  • 《异常检测——从经典算法到深度学习》6 基于重构概率的 VAE 异常检测

    《异常检测——从经典算法到深度学习》6 基于重构概率的 VAE 异常检测目录0概论1基于隔离森林的异常检测算法2基于LOF的异常检测算法3基于One-ClassSVM的异常检测算法4基于高斯概率密度异常检测算法5Opprentice——异常检测经典算法最终篇6基于VAE的异常检测算法6.基于VAE的异常检测算法论文名称:VariationalAutoencoderbasedAnomalyDetectionusingReconstructionProbability发表时间:2015.12立即下载论文总体

    2025年6月9日
    1
  • 第三章 软件项目范围管理

    第三章 软件项目范围管理项目范围对项目的影响是决定性的,它确定了软件项目工作内容的多少。有效的范围管理可以保证项目只做必须做的事情,避免范围蔓延和做无用功,同时也避免不清晰的需求所导致的严重的系统缺陷。 本章内容提要n3.1需求获取n3.2范围定义n3.3创建工作分解结构n3.4范围确认n3.5范围控制n3.6案例分析3.1需求获取n需求获取工作的任务就是收集项目干系人的需求信息,为定义项目的范围奠定基础。…

    2022年5月30日
    29
  • pycharm安装python3.6_python3.8怎么安装

    pycharm安装python3.6_python3.8怎么安装1.软件准备Python开发环境3.6以上PyCharm编辑器 Python开发环境3.6以上 浏览器谷歌最新版 浏览器驱动与浏览器版本匹配*资源包获取链接:https://pan.baidu.com/s/10n7MfZXtRNWnXJghT9xq2g提取码:w8mm 安装PyCharm 双击下载好的安装包“pycharm-community-2020.2.3.exe”,一路“Next”即可完成安装,可以修改默认安装路径。 安装P…

    2022年8月26日
    2
  • 快速解决Android中的selinux权限问题

    快速解决Android中的selinux权限问题关于selinux的详细资料,请查阅http://blog.csdn.net/innost/article/details/19299937在Android开发的过程中,遇到关于selinux相关的东西,当时还一下子看不懂,现在好像有点眉目了。比如,内核打印这个提示type=1400audit(32.939:25):avc:denied{open}forpid=2…

    2022年6月27日
    50
  • 命令行升级pip_pip升级版本命令

    命令行升级pip_pip升级版本命令查询当前pythonpip版本:pipshowpip输入python-mpipinstall–upgradepip命令升级;报错:ERROR:CouldnotinstallpackagesduetoanEnvironmentError:[WinError5]拒绝访问。:‘c:\programfiles\python37\lib\site-packages\pip-19.2.3.dist-info\entry_points.txt’Considerusin.

    2025年6月19日
    1
  • python模块list 转json字符串_python 列表 字典转json[通俗易懂]

    python模块list 转json字符串_python 列表 字典转json[通俗易懂]一、Dictionary转为JSON将dict转为JSON,这里利用包jsonimportjsonaItem={}aItem[“id”]=”2203″aItem[“title”]=”title”aItem[“subTitle”]=”subtitle”bItem={}bItem[“id”]=”2842″bItem[“title”]=”b标题”bItem[“subTi…

    2022年10月18日
    0

发表回复

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

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