前言

Python 列表拷贝很容易搞错,这里做一下简单的总结。通常我们只是想根据现有的列表来创建一个全新的列表,而一说到列表拷贝,可能会下意识的想到直接用“=”,那么我们通过示例来看看实际的结果。

正文

直接使用“=”赋值

看一个示例:

listA=["aaa","bbb","ccc"]
listB=listA
print("listA = ",listA)
print("listB = ",listB)

输出如下:

listA =  ['aaa', 'bbb', 'ccc']
listB =  ['aaa', 'bbb', 'ccc']

这看起来好像拷贝成功了,那么再做个试验:

listA=["aaa","bbb","ccc"]
listB=listA
print("listA = ",listA)
print("listB = ",listB)listA.append("ddd")
listB.append("eee")print("after listA = ",listA)
print("after listB = ",listB)

输出如下:

listA =  ['aaa', 'bbb', 'ccc']
listB =  ['aaa', 'bbb', 'ccc']
after listA =  ['aaa', 'bbb', 'ccc', 'ddd', 'eee']
after listB =  ['aaa', 'bbb', 'ccc', 'ddd', 'eee']

这时候发现输出结果和我们预期的并不一样,其原因是,我们直接将 listA 赋值给 listB,实际上只是将新变量 listB 关联到了 listA,并没有将 listA 的副本存储到 listB,所以当我们分别给 listA 和 listB 插入数据的时候,都是插入到 listA 中,而 listB 可以理解为 listA 的一个“别名”。所以如果想要做 Python 的列表拷贝,千万不要用直接赋值的方式,这样并不能得到我们想要的结果。

正确的拷贝方式

Python 提供了一种新的方式来进行列表拷贝,那就是“切片”。
示例如下:

listB=listA[:]

再来看看上面的示例:

listA=["aaa","bbb","ccc"]
listB=listA[:]
print("listA = ",listA)
print("listB = ",listB)listA.append("ddd")
listB.append("eee")print("after listA = ",listA)
print("after listB = ",listB)

输出结果:

listA =  ['aaa', 'bbb', 'ccc']
listB =  ['aaa', 'bbb', 'ccc']
after listA =  ['aaa', 'bbb', 'ccc', 'ddd']
after listB =  ['aaa', 'bbb', 'ccc', 'eee']

OK,这才是我们真正想要的结果,listB 完全是全新的列表。
以上方式其实类似于 C++的深拷贝和浅拷贝,在使用过程中要相当注意,很容易出错。

Python 列表拷贝相关推荐

  1. [转载] Python列表拷贝复制函数copy()函数的作用

    参考链接: Python list | copy 列表是可变类型数据,且实际操作过程中经常需要队列表进行增加.删除.修改列表里面的元素, 所以经常需要复制拷贝原始列表进行备份. Python使用cop ...

  2. python拷贝是什么知识点_地址对象python 列表拷贝知识点 地址对象

    时间紧张,先记一笔,后续优化与完善. 我们要需拷贝一个表列的话,可以用一个特别的方法,天今给大家说下. 我先定义一个表列 a=[1,2,34] 然后我通过内置方法id()来查看对象的地址 print ...

  3. python列表字典操作_Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结...

    创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_star ...

  4. python读取字符串的list dict_转:Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结...

    1 创建列表2 sample_list = ['a',1,('a','b')]3 4 Python 列表操作5 sample_list = ['a','b',0,1,3]6 7 得到列表中的某一个值8 ...

  5. [转载] Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结

    创建列表 sample_list = ['a',1,('a','b')]Python 列表操作 sample_list = ['a','b',0,1,3]得到列表中的某一个值 value_start ...

  6. Python列表List

    Python列表List(可变的): 列表的特点: 1.其中的元素可以不是同一类型的: example: list = [1, 2, "Qihe", True] 2.列表中的元素可 ...

  7. python列表浅复制_Python列表的深复制和浅复制示例详解

    一.深复制与浅复制 列表是Python中自带的一种数据结构,在使用列表时,拷贝操作不可避免,下面简单讨论一下列表的深复制(拷贝)与浅复制 首先看代码: l1 = [5, 4, 3, 2, 1] # 用 ...

  8. python列表操作函数大全_Python列表操作函数

    列表可以进行多个数据的存储,同时python中的列表设计非常到位,它可以实现内容动态扩充,可以进行后期数据的删除,这些就需要通过Python提供的列表操作函数来实现了. 对于Python语言而言,开发 ...

  9. python列表元素零的移动_python列表多行

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 这个列表推导式共有145列: memberdef_list = and std: ...

最新文章

  1. 预定义的类型“Microsoft.CSharp.RuntimeBinder.Binder”未定义或未导入
  2. C++继承和派生简明教程
  3. xib 设置阴影_使用“IBInspectable”XIB设置圆角、边框、阴影
  4. Linux中cut命令的使用
  5. xs128 双定时器PIT0和PIT1
  6. NC51189 Mondriaan‘s Dream
  7. UOJ #150 【NOIP2015】 运输计划
  8. [IDL入门] 两个PPT,IDL上手
  9. UVa 706 ZOJ 1146 LC-Display
  10. 判断显卡好坏的步骤、新买显卡装机后不亮解决
  11. 关于整型和浮点型的输出问题
  12. 日新测试软件,禁Ping多线程批量检测工具V2.6,功能强大,你值得拥有【2020.05.09日更新】...
  13. 泛微服务器运维监控,泛微协同平台E-cology8后台维护手册-流程引擎(261页)-原创力文档...
  14. 管理理论模型:PEST、5W2H、时间管理、生命周期、逻辑树、金字塔、SMART原则
  15. 2月28日 赵神牛打BOSS
  16. crypto 抄错的字符
  17. CPU/寄存器/内存
  18. Java synchronized偏向锁后hashcode存在哪里?
  19. 基于SpringBoot的便捷网住宿预约系统的设计与实现
  20. 设置--锁定屏幕--开启始终显示时间和信息,灭屏后不能点亮屏幕

热门文章

  1. 曾几何时,我们炼的不是丹,是特征
  2. 互联网1分钟 | 0214 2018 年超1/3的婚姻由约会交友类App促成;刘强东新开设 “南京京东云计算有限公司”...
  3. 喜大普奔,网易猪肉要到你碗里来了!
  4. centos7安装docker并配置阿里云镜像
  5. 深入理解springMVC
  6. CentOS7 安装并使用Ovirt 4.2
  7. ecshop百度编辑器远程下载无后缀的图片,并且加水印
  8. Mockito对final类型和方法的支持(三):免配置的inline mock making
  9. Linux中mod相关的命令 内核模块化 mod相关命令都是用来动态加载内核模块/驱动程序模块...
  10. How to install MinGW-w64 and MSYS2?