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实现扫描端口示例
Mar 29 Python
Python实现截屏的函数
Jul 25 Python
Python for Informatics 第11章之正则表达式(二)
Apr 21 Python
Python实现对百度云的文件上传(实例讲解)
Oct 21 Python
python http接口自动化脚本详解
Jan 02 Python
django ajax json的实例代码
May 29 Python
Python内存读写操作示例
Jul 18 Python
Python Numpy:找到list中的np.nan值方法
Oct 30 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
Jun 28 Python
Python模拟FTP文件服务器的操作方法
Feb 18 Python
基于Python组装jmx并调用JMeter实现压力测试
Nov 03 Python
Python卷积神经网络图片分类框架详解分析
Nov 07 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模块memcached使用指南
2014/12/08 PHP
php实现购物车功能(以大苹果购物网为例)
2017/03/09 PHP
javascript 避免闭包引发的问题
2009/03/17 Javascript
Jquery AJAX 框架的使用方法
2009/11/03 Javascript
JavaScript的parseInt 取整使用
2011/05/09 Javascript
jquery css 设置table的奇偶行背景色示例
2014/06/03 Javascript
介绍JavaScript的一个微型模版
2015/06/24 Javascript
jQuery通过写入cookie实现更换网页背景的方法
2016/04/15 Javascript
JS实现队列与堆栈的方法
2016/04/21 Javascript
javascript this详细介绍
2016/09/19 Javascript
Vue.JS入门教程之事件监听
2016/12/01 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
2016/12/12 Javascript
JS 在数组指定位置插入/删除数据的方法
2017/01/12 Javascript
Canvas 绘制粒子动画背景
2017/02/15 Javascript
React组件生命周期详解
2017/07/03 Javascript
关于JavaScript中forEach和each用法浅析
2017/07/27 Javascript
关于JavaScript中高阶函数的魅力详解
2018/09/07 Javascript
Vue实现移动端页面切换效果【推荐】
2018/11/13 Javascript
微信小程序之侧边栏滑动实现过程解析(附完整源码)
2019/08/23 Javascript
vue draggable resizable gorkys与v-chart使用与总结
2019/09/05 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
在vue中实现给每个页面顶部设置title
2020/07/29 Javascript
[02:29]完美世界高校联赛上海赛区回顾
2015/12/15 DOTA
python 读取文件并替换字段的实例
2018/07/12 Python
使用Python监视指定目录下文件变更的方法
2018/10/15 Python
对python中GUI,Label和Button的实例详解
2019/06/27 Python
Pamela Love官网:纽约设计师Pamela Love的精美、时尚和穿孔珠宝
2020/10/19 全球购物
村官学习十八大感想
2014/01/15 职场文书
教师绩效工资方案
2014/02/01 职场文书
面临毕业的毕业生自荐书范文
2014/02/05 职场文书
综合素质自我评价怎么写
2014/09/14 职场文书
2014年师德师风自我剖析材料
2014/09/27 职场文书
毕业生代领毕业材料的授权委托书
2014/09/29 职场文书
mysql中整数数据类型tinyint详解
2021/12/06 MySQL
SONY AN-LP1 短波有源天线放大器图
2022/04/05 无线电
Python中re模块的元字符使用小结
2022/04/07 Python