要谈列表的复制,我们就要谈到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)复制的那点事相关推荐

  1. Python学习之路:列表(List)的append()、extend()与insert()方法

    相同点 这三种方法的作用都是为列表(List)添加值 它们的语法为: list.append(obj)list.extend(seq)list.insert(index,obj) #此处index为对 ...

  2. Python学习之路—2018/7/14

    Python学习之路-2018/7/12 3.功能开发 3.3 设计博客首页 博客首页中最重要的就是中间的文章区域,所以我首先把文章区域设计出来,一开始并没有数据,如果用orm添加或者直接在数据库添加 ...

  3. Python学习之路—2018/6/20

    Python学习之路-2018/6/20 1.模板语法之变量 views.py def index(request):import datetimes="gyq"l=[1,2,3] ...

  4. Python学习之路9☞面向对象的程序设计

    Python学习之路9☞面向对象的程序设计 一 面向对象的程序设计的由来 见概述:http://www.cnblogs.com/linhaifeng/articles/6428835.html 二 什 ...

  5. Python学习(二)列表,for循环,切片,元组

    文章目录 Python学习(二) 列表 访问列表元素 修改列表元素 在列表中插入元素 在列表末尾插入元素 在列表中插入元素 删除列表元素 使用del语句删除元素 使用`pop()`删除元素 根据值删除 ...

  6. Python学习之路5☞文件处理

    Python学习之路5☞文件处理 一.文件处理流程 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 1 正趣果上果 2 Interesting fruit fruit 3 4 ...

  7. Python学习笔记D3(列表与元组)

    Python学习笔记D3(列表与元组) 列表定义语法 number=[1,2,3,4,5] print(number,type(number)) #[1,2,3,4,5] <class'list ...

  8. Python学习之路【第一篇】-Python简介和基础入门

    1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...

  9. python之路 mysql 博客园_教为学:Python学习之路(二):MySQLdb的几种安装方式,以及用Python测试连接MySql...

    教为学:Python学习之路(二):MySQLdb的几种安装方式,以及用Python测试连接MySql Easy_install安装MySQLdb 很简单,以至于我不晓得该怎么说.一句话. sodu ...

  10. Python学习day12(生成器,列表/生成器推导式)

    Python学习day12(生成器,列表/生成器推导式) 生成器 初始生成器 我们知道的迭代器有两种:一种是调用方法直接返回的,一种是可迭代对象通过执行iter方法得到的,迭代器有的好处是可以节省内存 ...

最新文章

  1. 注意scrapy中SgmlLinkExtractor的默认deny_extensions
  2. ios 获得通讯录中联系人的所有属性 亲测,可行 兼容io6 和 ios 7
  3. Ubuntu update case the virtualbox crash
  4. PP面向订单生产模式探讨
  5. html中设置td中内容的垂直位置
  6. 开源代码“All in One”:6 份最新「Paper + Code」等你复现 | PaperDaily #12
  7. linux下drcom无法上网,drcom为什么还是不能上网啊!
  8. Plugin ‘scala’ is incompatible with this installation
  9. POJ3981 字符串替换【水题】
  10. asp.net 连接SQL Server 数据库并进行相关操作
  11. 百度开源呼叫中心系统
  12. 关于nginx指向nacos遇到的坑
  13. java 从视频里面提取音频 批量
  14. Tensorflow2-卷积神经网络实现图片分类
  15. 在git bash中输入git init 提示错误信息: fatal: open /dev/null or dup failed: No such file or directory的解决办法
  16. Cuckoo针对恶意软件自动化分析系统
  17. keep-alive和activated的使用
  18. 转载:GPS卫星 星历与历书的区别(为了方便在navcen官网下载GPS历书后不知道具体含义的)
  19. 如何使用SecureCRT连接华为eNSP模拟器
  20. 模拟360导航的钢琴效果实现

热门文章

  1. 理解Anchor、RPN真值与预测量、RPN卷积网络
  2. 快过年了,Python实现12306查票以及自动购票....
  3. 51单片机数码管滚动显示学号_单片机数码管显示0到9程序代码
  4. 美国L1签证和B1,E2签证的区别
  5. 短信聊天软件需求征集
  6. 怎么精细化管理客户关系?企业微信CRM系统可以做到吗
  7. 微信CRM六大模块详解
  8. MATLAB--数字图像处理 特征点匹配
  9. 游戏平台搭建在韩国大带宽服务器CN2路线哪里的比较好
  10. Arduino与Proteus仿真实例-LCD12864液晶显示屏(ST7920)驱动仿真