python中list的深拷贝和浅拷贝

news2025/2/25 18:29:44

其实这还是涉及到python中的可变对象和不可变对象的概念。

https://www.cnblogs.com/poloyy/p/15073168.html

# -*- coding: utf-8 -*-

person = ['name', ['savings', 100.00]]
hubby = person[:] # slice copy
wifey = list(person) # fac func copy
a = [id(x) for x in person]
b = [id(x) for x in hubby]
c = [id(x) for x in wifey]
print("person", a) # person [2581907861552, 2582842106496]
print("hubby", b) # hubby [2581907861552, 2582842106496]
print("wifey", c) # wifey [2581907861552, 2582842106496]

print(id(a), id(b), id(c)) # 2582843034240 2582843034496 2582843035200

hubby[0] = "Jack" 
# ------------------------!!!!!------------------
# 第一步: 等号右边,创建"Jack"字符串,第二步:将"Jack"的地址链接到hubby的第一个元素上
# ------------------------!!!!!------------------
print(person, hubby, wifey)
# ['name', ['savings', 100.0]] ['Jack', ['savings', 100.0]] ['name', ['savings', 100.0]]
print(id(hubby[0]), id(person[0])) # 2582842278064 2581907861552

hubby[1][0] = "saved"  
# 这一步相当于直接改变了只有一层的['savings', 100.00]的第一个元素,所以任何引用这个只有一层的
# list的变量,都会改变对应的值。这也是对单层list和对嵌套list要注意深拷贝和浅拷贝的原因。
print(person, hubby, wifey)
 # ['name', ['saved', 100.0]] ['Jack', ['saved', 100.0]] ['name', ['saved', 100.0]]
d = 'name'
print(id(d)) # 2581907861552
d = "jack"
print(id(d)) # 2582842106800






dic = {
       "a": ["1","2", "3"],
       "b": ["1","2", "3"],
       "c": ["1","2", "3"],
       }


c = "2"
print(id(dic["a"][1]), id(c))
# 这一步说明在python内,对于同一个不可变数据类型,都是使用的同一个地址,
# 因为是不可变数据类型,原子化操作的了,所以即使在不同的数据结构中,
# 使用的地址一样也没关系,因为它已经是不可变的了。其值不可以被改变,如果
# 不再继续用这个值,用另一个值就可以了。
a = [1,2,3]
b = a + [6]
print(a, b)
[1, 2, 3] [1, 2, 3, 6]

a[0] = 10
print(a, b)

[10, 2, 3] [1, 2, 3, 6]

可以发现b的值并没有因为a[0]的改变而改变,因为b本身也是一个一维的list,只有一层
b里面的存储: [id(1), id(2), id(3), id(4)]
然后改变a之后,a由[id(1), id(2), id(3)] -> [id(10), id(2), id(3)],
并不会影响b。
也就是说,内存地址直接连接到不可变对象的,互相改来改去是没有影响的。

所以说,对于单层的list,浅拷贝看起来就直接是类似于深拷贝那种,不会互相影响。
个人理解:如果一个list中包着单层dict,也不一定就是单层list,应该是list里只包着不可变对象这种的,
才应该被理解为单层list。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1960239.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Vue3】watch 监视多种类型数据

【Vue3】watch 监视多种类型数据 背景简介开发环境开发步骤及源码 背景 随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗…

新闻稿的写作格式,干货分享

随着互联网的发展,新闻稿在互联网上的地位非常高,新闻稿对比一般软文来说内容质量偏高而且还具备:严谨、时效、可观的特点。 撰写新闻稿主要就是突出最新鲜、最重要的事实,同时,新闻稿也是文字简洁,并且时效…

【nginx、apache】网站只有首页可以正常打开,其他页面都实现404

【nginx、apache】网站只有首页可以正常打开,其他页面都实现404 1、检查伪静态规则(中枪)

【剑指offer】

剑指offer 面试题67&#xff1a;字符串转成整数面试题1&#xff1a;赋值运算符函数面试题3&#xff1a;数组中重复的数字 面试题67&#xff1a;字符串转成整数 LeedCode&#xff1a;LCR 192. 把字符串转换成整数 (atoi) 测试atoi的功能和异常效果 #include <iostream> #…

【Linux】全志Tina配置屏幕时钟的方法

一、文件位置 V:\f1c100s\Evenurs\f1c100s\tina\device\config\chips\c200s\configs\F1C200s\sys_config.fex 二、文件内容 三、介绍 在此处可以修改屏幕的频率&#xff0c;当前为21MHz。 四、总结 注意选择对应的屏幕的参数&#xff0c;sdk所支持的屏幕信息都在此文件夹中…

嵌入式C++、STM32、Flask框架、SQL、ROS系统和MQTT协议通讯:智能药盒及物联网数据监测设计思路(代码示例)

目录 项目概述 系统设计 硬件设计 软件设计 系统架构图 代码实现 1. 开发环境 2. STM32 微控制器代码示例 3. ROS 节点代码示例 4. 后端服务器代码示例&#xff08;Flask&#xff09; 数据库部分 3.4 删除药物记录 项目概述 随着老龄化社会的加剧&#xff0c;患者…

钢琴模拟器

文章目录 钢琴模拟器代码结构HTML结构CSS样式JavaScript功能 源码效果图 钢琴模拟器 代码结构 HTML结构 <html>: HTML文档的根元素。 <head>: 包含文档的元数据。 <base>: 指定相对URL的基准。 <title>: 指定页面的标题。 <style>: 包含嵌入的…

关于用log提高排查问题的设置

今天在了解项目业务的时候&#xff0c;想搞清楚执行顺序&#xff0c;加了很多打印&#xff0c;类似console.log(1111,xxxx) console.log(2222,xxxx)&#xff0c;有时候断点没开sourcemap不是源码所以我更喜欢打印&#xff0c;然后就导致打印比较紊乱&#xff0c;而且前面的1111…

sql截取时间数据方法函数之截取时间的年月

sql截取时间数据方法函数之截取时间的年月 方法一&#xff1a;DATE_FORMAT() 函数 select trans_date,date_format(trans_date,%Y-%m) month from Transactions;方法二&#xff1a;left(str, length)函数 #从左边开始截取 select trans_date,left(trans_date, 7) month fro…

中国高新科技杂志中国高新科技杂志社中国高新科技编辑部2024年第10期目录

科研达人 互联网领域资深工程师陈晔 技术引领 创新赋能 以IT技术推动行业转型升级 宋丽君; 5-6 中国科学院过程工程研究所副研究员武春晓 助跑科研“马拉松”共圆创新中国梦 周玮 ;杨烁; 7-8 中国科学院大学资源与环境学院副教授蔡晓琳 生物治理重金属 土壤焕发新生…

「安当产品应用案例100集」004-国密UKEY增强软件授权安全

国密UKEY在软件授权方案中的应用主要体现在增强软件授权的安全性、实现更严格的访问控制以及满足特定行业或领域的安全要求等方面。以下是安当的客户在软件授权方面的应用案例概述。 一、安当UKEY软件授权案例 国密UKEY&#xff0c;即采用国家密码管理局认证的密码算法的USB安全…

Spring源码解析(25)之AOP的BeanDefinitiion准备

一、AOP代码准备 aop.xml文件准备&#xff0c;代码如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance…

【轻松拿捏】Java-List、Set、Map 之间的区别是什么?

List、Set、Map 之间的区别是什么&#xff1f; 一、List 二、Set 三、Map &#x1f388;边走、边悟&#x1f388;迟早会好 一、List 有序性&#xff1a;List 保持元素的插入顺序&#xff0c;即元素按添加的顺序存储和访问。允许重复&#xff1a;List 可以包含重复的元素。…

docker compose 安装 kafka

一 前置准备 创建 /data/kafkadata /data/zookeeper-1用于保存kafka和zookeeper的配置文件 kafkadata中创建三个文件夹 /kafka1 /kafka2 /kafka3&#xff0c;用于存放三个kafka节点的配置文件 zookeeper-1文件夹中创建 /conf /data /logs /datalog四个文件夹&#xff0c;用于…

AI时代,让文献主动找上门——揭开文本和数据挖掘的变革性力量

文本和数据挖掘&#xff08;text and data mining, TDM&#xff09;使用计算工具和技术来分析大型文本数据集&#xff0c;从学术论文、期刊和其他科学出版物中的大量科学数据里提取有价值的见解&#xff0c;旨在识别通过传统人工分析难以或无法发现的模式、关联和趋势&#xff…

计算机网络HTTP全讲解,让你透彻掌握HTTP协议(三)http长短连接/代理/网关/缓存/内容协商机制/断点续传

HTTP HTTP的长连接与短连接短链接长链接HTTP代理代理的作用HTTP网关web网关常见的网关类型HTTP缓存HTTP缓存头部字段HTTP缓存工作方式缓存改进方案cdn缓存工作方式浏览器操作对http缓存的影响HTTP内容协商机制客户端驱动服务器驱动请求首部集近似匹配透明协商断点续传和多线程下…

类和对象的深入了解4

1.析构函数 1.1析构函数概念 与构造函数功能相反&#xff0c;析构函数不是完成对对象本身的销毁&#xff0c;局部对象销毁工作是由编译器完成 的。而对象在销毁时会自动调用析构函数&#xff0c;完成对象中资源的清理工作。它的名字与类名相同&#xff0c;前面加上一个波浪号…

LLM大模型:十大人工智能大模型技术介绍

十大人工智能大模型技术的简介&#xff1a; 深度学习模型 深度学习是人工智能领域中一种重要的机器学习技术&#xff0c;通过构建深度神经网络来模拟人脑的认知过程。深度学习模型能够自动提取数据的特征&#xff0c;并在海量数据中进行学习和优化&#xff0c;从而在语音识别…

79.WEB渗透测试-信息收集-框架组件识别利用(3)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;78.WEB渗透测试-信息收集-框架组件识别利用&#xff08;2&#xff09;-CSDN博客 struts2…

长面板数据实证模型及 Stata 具体操作步骤

目录 一、文献综述 二、理论原理 三、实证模型 四、稳健性检验 五、程序代码及解释 六、代码运行结果 一、文献综述 长面板数据在经济学、金融学、社会学等领域的研究中得到了广泛应用。许多学者通过构建长面板数据模型来研究各种经济现象和社会问题。例如&#xff0c;在研…