python复制列表时[:]和[::]之间有什么区别


Posted in Python onOctober 16, 2018

前言

new = old[:]

Python老鸟都知道以上代码是什么意思。它复制列表old到new。它对于新手来说是种困惑而且应该避免使用这种方法。不幸的是[:]标记法被广泛使用,可能是Python程序员不知道更好的列表复制法吧。然而本文给大家介绍的是关于python复制列表时[:]和[::]之间有什么区别,下面来一起看看吧

我们可以(浅)使用[:]复制列表:

l = [1, 2, 3]
z1 = l[:]

我们也可以(浅)使用[::]复制它:

z2 = [::]

现在z1 == z2将为True.在Explain Python's slice notation阅读答案后,我了解这些图片的工作原理.

但是,我的问题是这两个内部是否有区别?在复制中比其他效率更高,还是做完全相同的事情?

最佳答案

他们之间绝对没有区别,至少在Python 3中.如果你愿意,可以使用dis.dis来检查每个这些使用的字节码:

l = [1, 2, 3, 4]

针对l [:]发出的字节码:

from dis import dis
dis('l[:]')
 1   0 LOAD_NAME    0 (l)
    3 LOAD_CONST    0 (None)
    6 LOAD_CONST    0 (None)
    9 BUILD_SLICE    2
    12 BINARY_SUBSCR
    13 RETURN_VALUE

而为l [::]发送的字节码:

dis('l[::]')
 1   0 LOAD_NAME    0 (l)
    3 LOAD_CONST    0 (None)
    6 LOAD_CONST    0 (None)
    9 BUILD_SLICE    2
    12 BINARY_SUBSCR
    13 RETURN_VALUE

你可以看到,它们完全一样.对于构建切片(BUILD_SLICE)的起始和停止值都加载一些无(两个LOAD_CONSTS),并应用它. NONE是Standard Type hierarchy中切片文档中所述的默认值:

Special read-only attributes: start is the lower bound; stop is the upper bound; step is the step value; each is None if omitted. These attributes can have any type.

使用[:],它的键击少.

实际上有趣的是,在Python 2.x中,生成的字节代码是不同的,由于l [:]的命令较少,可能会稍微更高效:

>>> def foo():
...  l[:]
... 
>>> dis(foo)
 2   0 LOAD_GLOBAL    0 (l)
    3 SLICE+0    
    4 POP_TOP    
    5 LOAD_CONST    0 (None)
    8 RETURN_VALUE

而对于l [::]:

>>> def foo2():
...  l[::]
... 
>>> dis(foo2)
 2   0 LOAD_GLOBAL    0 (l)
    3 LOAD_CONST    0 (None)
    6 LOAD_CONST    0 (None)
    9 LOAD_CONST    0 (None)
    12 BUILD_SLICE    3
    15 BINARY_SUBSCR  
    16 POP_TOP    
    17 LOAD_CONST    0 (None)
    20 RETURN_VALUE

即使我没有定时这些(我不会,差异应该很小)看起来,由于只需要更少的指示,l [:]可能稍微好一点.

这种相似性当然不存在于列表中;它适用于Python中的所有序列:

# Note: the Bytecode class exists in Py > 3.4
>>> from dis import Bytecode
>>>
>>> Bytecode('(1, 2, 3)[:]').dis() == Bytecode('(1, 2, 3)[::]').dis() 
True
>>> Bytecode('"string"[:]').dis() == Bytecode('"string"[::]').dis() 
True

对于别人也是如此.

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python中转换角度为弧度的radians()方法
May 18 Python
Python中的异常处理相关语句基础学习笔记
Jul 11 Python
python利用Guetzli批量压缩图片
Mar 23 Python
通过源码分析Python中的切片赋值
May 08 Python
Python微信公众号开发平台
Jan 25 Python
Python json模块dumps、loads操作示例
Sep 06 Python
Python+OpenCV感兴趣区域ROI提取方法
Jan 10 Python
对PyQt5中树结构的实现方法详解
Jun 17 Python
Python 的字典(Dict)是如何存储的
Jul 05 Python
Python实现RGB与HSI颜色空间的互换方式
Nov 27 Python
python对象销毁实例(垃圾回收)
Jan 16 Python
Python调用shell cmd方法代码示例解析
Jun 18 Python
使用Python编写Prometheus监控的方法
Oct 15 #Python
python取数作为临时极大值(极小值)的方法
Oct 15 #Python
Python文件监听工具pyinotify与watchdog实例
Oct 15 #Python
Python并行分布式框架Celery详解
Oct 15 #Python
对Python 内建函数和保留字详解
Oct 15 #Python
Python 比较文本相似性的方法(difflib,Levenshtein)
Oct 15 #Python
便捷提取python导入包的属性方法
Oct 15 #Python
You might like
php时区转换转换函数
2014/01/07 PHP
学习php设计模式 php实现状态模式
2015/12/07 PHP
js实现的真正的iframe高度自适应(兼容IE,FF,Opera)
2010/03/07 Javascript
用jQuery模拟页面加载进度条的实现代码
2011/12/19 Javascript
Javascript 中的 call 和 apply使用介绍
2012/02/22 Javascript
jquery滚动特效集锦
2015/06/03 Javascript
浅谈JavaScript字符串与数组
2015/06/03 Javascript
jQuery实现美观的多级动画效果菜单代码
2015/09/06 Javascript
js获取腾讯视频ID的方法
2016/10/03 Javascript
vue双向数据绑定知识点总结
2018/04/18 Javascript
浅谈Webpack多页应用HMR卡住问题
2019/04/24 Javascript
基于Vue实现的多条件筛选功能的详解(类似京东和淘宝功能)
2019/05/07 Javascript
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
2009/04/09 Python
Django的数据模型访问多对多键值的方法
2015/07/21 Python
新手常见6种的python报错及解决方法
2018/03/09 Python
python 以16进制打印输出的方法
2018/07/09 Python
python3.5基于TCP实现文件传输
2020/03/20 Python
Python 旋转打印各种矩形的方法
2019/07/09 Python
简单的Python调度器Schedule详解
2019/08/30 Python
python sqlite的Row对象操作示例
2019/09/11 Python
TensorFlow2.0矩阵与向量的加减乘实例
2020/02/07 Python
Python requests模块基础使用方法实例及高级应用(自动登陆,抓取网页源码)实例详解
2020/02/14 Python
世界上最悠久的自行车制造商:Ribble Cycles
2017/03/18 全球购物
英国电视和家用电器购物网站:rlrdistribution.co.uk
2018/11/20 全球购物
德国高尔夫商店:Golfshop.de
2019/06/22 全球购物
市场营销个人求职信范文
2014/02/02 职场文书
留守儿童工作方案
2014/06/02 职场文书
党员群众路线学习心得体会
2014/11/04 职场文书
2014年终工作总结范本
2014/12/15 职场文书
委托书格式范文
2015/01/28 职场文书
数学考试作弊检讨书300字
2015/02/16 职场文书
公司员工手册范本
2015/05/14 职场文书
2016年优秀班主任先进事迹材料
2016/02/26 职场文书
MongoDB数据库常用的10条操作命令
2021/06/18 MongoDB
未发现nvidia显卡怎么办?Win11系统中未检测到nvidia显卡解决教程
2022/04/08 数码科技
Win11使用CAD卡顿或者致命错误怎么办?Win11无法正常使用CAD的解决方法
2022/07/23 数码科技