要谈列表的复制,我们就要谈到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已经没有那种剪不断理还乱的羁绊了 (乛◡乛

Python学习之路:关于列表(List)复制的那点事的更多相关文章

  1. python学习之路04——列表和字典

    列表和字典 python中的可变数据类型有:列表和字典 不可变类型:数字,字符串,元组 今天先讲列表和字典 一.列表 1.概念: 变量:使用变量存储数据,但是,变量存储数据每次只能存储一个数据 问题: ...

  2. Python学习之路2 - 列表和元组

    列表 概念:Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 列表的使用 names = ['zhangsan','lisi','wangwu' ...

  3. python学习,day2:列表的复制

    主要涉及列表的潜复制(第二层受后面修改的影响)和深复制(不受后面修改的影响) 代码如下 # coding=utf-8 # Author: RyAn Bi import copy names = ['A ...

  4. python学习,day2:列表的复制,字符串的处理

    ---恢复内容开始--- 元组(tuple)是只读列表,不能修改,列表用中括号,元组用小括号.只能用index和count两个命令. ---恢复内容结束--- 字符串处理的代码 # coding=ut ...

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

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

  6. python学习之路-day2-pyth基础2

    一.        模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,第三方库存放位置:site-packages sys模块简介 导入模块 import sys 3 sys模 ...

  7. Python学习之路-Day2-Python基础3

    Python学习之路第三天 学习内容: 1.文件操作 2.字符转编码操作 3.函数介绍 4.递归 5.函数式编程 1.文件操作 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个 ...

  8. Python学习之路-Day2-Python基础2

    Python学习之路第二天 学习内容: 1.模块初识 2.pyc是什么 3.python数据类型 4.数据运算 5.bytes/str之别 6.列表 7.元组 8.字典 9.字符串常用操作 1.模块初 ...

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

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

  10. Python学习之路-Day1-Python基础

    学习python的过程: 在茫茫的编程语言中我选择了python,因为感觉python很强大,能用到很多领域.我自己也学过一些编程语言,比如:C,java,php,html,css等.但是我感觉自己都 ...

随机推荐

  1. 使用Windows事件查看器调试崩溃

    本文讨论如何使用Windows事件查看器获取实际崩溃的模块以及代码中崩溃的位置.示例代码是用C++编写的,以生成不同类型的崩溃,例如访问冲突和堆栈溢出. 简介 我经常听同事和QA那里听说,一个特定的崩 ...

  2. genie 来自netflix 的分布式大数据调度服务

    Genie是Netflix开发的联合作业编排引擎.Genie提供REST-ful API来运行各种大数据工作,如Hadoop,Pig,Hive,Spark,Presto,Sqoop等.它还提供用于管理 ...

  3. RookeyFrame 一些心得 或者 调试技巧等

    因为没有依赖具体的实现层,类库的输出路径又没有设置在web层的bin目录,所以每次都要拷贝实现层的DLL过去,有时候拷贝过去了还是没有反应,估计是缓存什么的吧, 解决:先那几个web层bin目录的 D ...

  4. 【JZOJ6245】【20190627】A

    题目 给定一颗\(n\)个点的树,边权为1,并给出\(\{w_i\}\)满足\(w_0=0\) \[ f(i) = \sum_{j=1}^{n} w_{dis(i,j)} \] 依次输出每一个\(f_ ...

  5. 机器学习之决策树原理和sklearn实践

    1. 场景描述 时间:早上八点,地点:婚介所 '闺女,我有给你找了个合适的对象,今天要不要见一面?' '多大?' '26岁' '长的帅吗?' '还可以,不算太帅' '工资高吗?' '略高于平均水平' ...

  6. js转义问题

    js转义问题有很多场景,比如常见的根据某个字符串删除或者修改以及将某字符串传递至某个页面. 今天以一个简单的示例代码为例: <html> <head> <meta htt ...

  7. Tomcat 9 管理界面配置

    Tomcat9 在conf/tomcat_user.xml配置后,还是出现如下错误 然后修改tomcat9/webapps/manager/META-INF的context.xml文件

  8. 检查 chrome 插件是否存在

    你必须了解 chrome 插件开发才能阅读以下内容. 传送门: https://qa.1r1g.com/sf/ask/440544891/ 原理:页面 js 向 chrome 插件的 backgrou ...

  9. Fragment: 使用newInstance()来实例化fragment(转)

    先说结论: 1. 当需要给Fragment传值时,使用newInstance()方式来实例化一个Fragment,能够更好的将该Fragment使用的参数捆绑起来,不必每次实例化时都写下面的代码: B ...

  10. x3d

    目录 3d format introduction x3d resources open source C++ implementations file formats 1. Feature matr ...