Python学习之路:关于列表(List)复制的那点事
要谈列表的复制,我们就要谈到Python的赋值规则
首先我们创建列表a:
a = [1,2,3]
通常我们复制一个元素的方法是这样的:
b = a #复制元素的一般方法print(a) print(b)结果为: [1,2,3] [1,2,3]
通过这行代码,我们固然是创建了一个与列表a相等的列表b,但此时却会出现一个问题:
当我们尝试对新创建的列表b进行排序操作(如倒序操作)时:
b.reverse()print(b)结果为: [3,2,1]
到这里一切看似没啥毛病,实则坑爹的事情已经悄然发生~
让我们尝试打印一下列表a的值:
print(a)结果为: [3,2,1]
可以看到,列表a的排序也改变了
这未必是我们希望看到的结果
出现这种情况的原因是:
当我们使用“b=a”这条代码来赋值列表b时,列表b与列表a是指向同一个地址的,而对列表进行排序操作并不会赋给列表一个新的地址,也就是说此时无论我们是对列表a或是对列表b进行排序操作,另一个列表的排序也会随之改变
而如果我们对列表a或是对列表b进行赋值操作的话,则没有这种顾虑,因为在赋值的时候列表会分配到一个新的地址
那么我们要如何解决这一问题呢?
很简单,只需利用列表的分片,使用如下代码对列表进行复制操作:
a = [1,2,3] b = a[:] #复制列表的正确方式print(a) print(b)结果为: [1,2,3] [1,2,3]
此时我们再对列表b进行倒序操作:
b.reverse()print(a) print(b)结果为: [1,2,3] [3,2,1]
可以看到只有列表b的排序改变了,而列表a的排序没有变,那是因为列表a和列表b已经没有那种剪不断理还乱的羁绊了 (乛◡乛)
转载于:https://www.cnblogs.com/toxic-antidote/p/11409151.html
Python学习之路:关于列表(List)复制的那点事相关推荐
- Python学习之路:列表(List)的append()、extend()与insert()方法
相同点 这三种方法的作用都是为列表(List)添加值 它们的语法为: list.append(obj)list.extend(seq)list.insert(index,obj) #此处index为对 ...
- Python学习之路—2018/7/14
Python学习之路-2018/7/12 3.功能开发 3.3 设计博客首页 博客首页中最重要的就是中间的文章区域,所以我首先把文章区域设计出来,一开始并没有数据,如果用orm添加或者直接在数据库添加 ...
- Python学习之路—2018/6/20
Python学习之路-2018/6/20 1.模板语法之变量 views.py def index(request):import datetimes="gyq"l=[1,2,3] ...
- Python学习之路9☞面向对象的程序设计
Python学习之路9☞面向对象的程序设计 一 面向对象的程序设计的由来 见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html 二 什 ...
- Python学习(二)列表,for循环,切片,元组
文章目录 Python学习(二) 列表 访问列表元素 修改列表元素 在列表中插入元素 在列表末尾插入元素 在列表中插入元素 删除列表元素 使用del语句删除元素 使用`pop()`删除元素 根据值删除 ...
- Python学习之路5☞文件处理
Python学习之路5☞文件处理 一.文件处理流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 1 正趣果上果 2 Interesting fruit fruit 3 4 ...
- Python学习笔记D3(列表与元组)
Python学习笔记D3(列表与元组) 列表定义语法 number=[1,2,3,4,5] print(number,type(number)) #[1,2,3,4,5] <class'list ...
- Python学习之路【第一篇】-Python简介和基础入门
1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...
- python之路 mysql 博客园_教为学:Python学习之路(二):MySQLdb的几种安装方式,以及用Python测试连接MySql...
教为学:Python学习之路(二):MySQLdb的几种安装方式,以及用Python测试连接MySql Easy_install安装MySQLdb 很简单,以至于我不晓得该怎么说.一句话. sodu ...
- Python学习day12(生成器,列表/生成器推导式)
Python学习day12(生成器,列表/生成器推导式) 生成器 初始生成器 我们知道的迭代器有两种:一种是调用方法直接返回的,一种是可迭代对象通过执行iter方法得到的,迭代器有的好处是可以节省内存 ...
最新文章
- 注意scrapy中SgmlLinkExtractor的默认deny_extensions
- ios 获得通讯录中联系人的所有属性 亲测,可行 兼容io6 和 ios 7
- Ubuntu update case the virtualbox crash
- PP面向订单生产模式探讨
- html中设置td中内容的垂直位置
- 开源代码“All in One”:6 份最新「Paper + Code」等你复现 | PaperDaily #12
- linux下drcom无法上网,drcom为什么还是不能上网啊!
- Plugin ‘scala’ is incompatible with this installation
- POJ3981 字符串替换【水题】
- asp.net 连接SQL Server 数据库并进行相关操作
- 百度开源呼叫中心系统
- 关于nginx指向nacos遇到的坑
- java 从视频里面提取音频 批量
- Tensorflow2-卷积神经网络实现图片分类
- 在git bash中输入git init 提示错误信息: fatal: open /dev/null or dup failed: No such file or directory的解决办法
- Cuckoo针对恶意软件自动化分析系统
- keep-alive和activated的使用
- 转载:GPS卫星 星历与历书的区别(为了方便在navcen官网下载GPS历书后不知道具体含义的)
- 如何使用SecureCRT连接华为eNSP模拟器
- 模拟360导航的钢琴效果实现