Python基础详解之列表复制
作者:linda公馆 发布时间:2022-09-24 02:39:10
标签:python,列表,复制
一、前言
Python中列表的复制分为几种情况:
直接赋值
浅复制
深复制
下面通过实例分析一下这几种情况的区别。
二、直接赋值
a = [11, 22, 33]
b = a
print(id(a), id(b))
b[0]=1
print(a,b)
输出结果为如下所示,发现内存地址没有发生变化,b只是a的引用,通过b更改列表的值时,a同时做修改。
三、用切片赋值
a = [11, 22, 33]
b = a[:]
print(id(a), id(b))
b[0]=1
print(a,b)
输出结果为如下所示,发现内存地址发生了变化,通过b更改列表的值时,对a没有任何的影响。
四、copy()复制实现赋值
a = [11, 22, 33]
b = copy.copy(a)
print(id(a), id(b))
b[0]=1
print(a,b)
输出结果为如下所示,
发现内存地址发生了变化,通过b更改列表的值时,对a没有任何的影响。说明copy()复制的方式和切片的方式功能相同。
五、deepcopy()复制实现赋值
a = [11, 22, 33]
b = copy.deepcopy(a)
print(id(a), id(b))
b[0]=1
print(a,b)
输出结果为如下所示,发现在该实例中,deepcopy()和copy()的方式没有任何区别。
那么浅复制和深复制有什么区别呢?继续看下面的实例测试。
六、copy()和deepcopy()的区别
6.1 copy()
a = [11, 22, 33, [1,2]]
b = copy.copy(a)
print(id(a), id(b))
b[3][0]=11
print(a,b)
运行结果:
6.2 deepcopy()
a = [11, 22, 33, [1,2]]
b = copy.deepcopy(a)
print(id(a), id(b))
b[3][0]=11
print(a,b)
运行结果:
通过上面的测试,发现当列表a中的元素包含子列表时:
copy()方法为浅复制,没有复制子对象,当原始数据改变,子对象会改变;而deepcopy()方法包含对象里面的子对象的复制,当原始对象改变,不会造成深复制里任何子元素的改变。
来源:https://blog.csdn.net/qq_40078436/article/details/115861455


猜你喜欢
- sysdate+(5/24/60/60) 在系统时间基础上延迟5秒 sysdate+5/24/60 在系统时间基础上延迟5分钟 sysdat
- python的版本经过了python2.x和python3.x等版本,无论哪种版本,关于python爬虫相关的知识是融会贯通的,脚本之家关于
- 1. 序言每年淘宝双十一的时候,总是要刷各种各样的浏览页面,收集能量或者喵币或者什么。那既然如此,我就总想着,能否通过Python自动调用的
- 如下所示:找了好久,今天无意中敲出来了:ctrl+l(小写)全局查找某个变量:ctrl+h我用的Eclipse快捷键来源:https://b
- <?php// 使用Memache 作为进程锁 class lock_processlock{// key 的前缀protected
- 菜鸟版代码如下: 理解这段代码就基本上掌握了 function f_s() { var obj = document.getElementB
- 目录1、创建相关新应用2、获取Access Token3、分析评论并进行观点抽取4、运行结果利用百度API自然语言处理技术中的评论观点抽取方
- 1、准备工作1.1 库介绍只有登录微信才能获取到微信好友的信息,本文采用wxpy该第三方库进行微信的登录以及信息的获取。wxpy 在 itc
- 前言:决策树是梯度提升机和随机森林的基本构建块,在学习这些模型的工作原理和模型可解释性时,可视化决策树是一个非常有帮助。不过,当前的可视化包
- 一:目录操作 首先介绍的是一个从目录读取的函数,opendir(),readdir(),closedir(),使用的时候是先打开文件句柄,而
- 本文实例讲述了JavaScript实现为input与textarea自定义hover,focus效果的方法。分享给大家供大家参考。具体如下:
- 前两天研究了一下textarea的直观行的换行规律,挺复杂啊:直观行怎样取不光要看cols大小,还要看网页编码方式。cols="3
- 实例的背景说明假定一个个人信息系统,需要记录系统中各个人的故乡、居住地、以及到过的城市。数据库设计如下:Models.py 内容如下:&nb
- 有这么一个题目,说bt其实也不bt,为了重点突出其中的意图,特意加上了括号:var a = (++Math.P
- 一 概念1. 原理2. 好处不同项目可能用到的环境不同,运用虚拟环境能将不同环境分隔开二 virtualenvvirtual 虚拟的1. 安
- 原理:print() 函数会把内容放到内存中, 内存中的内容并不一定能够及时刷新显示到屏幕中(应该是要满足某个条件,这个条件现在还不清楚)。
- Vue 3.2 引入了语法,这是一种稍微不那么冗长的声明组件的方式。您可以通过向 SFC 的元素添加属性来启用它,然后可以删除组件中的一些样
- 字典的常用方法方便举例,先创建2个字典list_test={"bob":19,"aoa":18,&q
- 概述源码地址torch版本训练环境没有按照torch的readme一样的环境,自己部署环境为:torch==1.9.1torchvision
- 在网上查了部分资料但是发现粘上去的代码都存在问题,无奈只好自己修改了一下,代码如下: 如下代码能正常运行,都是网上查找资料最后拼凑总结出来的