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 27 Python
python广度优先搜索得到两点间最短路径
Jan 17 Python
pycharm重命名文件的方法步骤
Jul 29 Python
Window10下python3.7 安装与卸载教程图解
Sep 30 Python
以SQLite和PySqlite为例来学习Python DB API
Feb 05 Python
tensorflow 报错unitialized value的解决方法
Feb 06 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
Mar 04 Python
Python通过Pillow实现图片对比
Apr 29 Python
python获取linux系统信息的三种方法
Oct 14 Python
如何用python 操作zookeeper
Dec 28 Python
python实现无边框进度条的实例代码
Dec 30 Python
python使用pygame创建精灵Sprite
Apr 06 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
c#中的实现php中的preg_replace
2009/12/21 PHP
php使用百度ping服务代码实例
2014/06/19 PHP
PHP输出多个元素的排列或组合的方法
2017/03/14 PHP
php实现断点续传大文件示例代码
2020/06/19 PHP
JS查看对象功能代码
2008/04/25 Javascript
拖拉表格的JS函数
2008/11/20 Javascript
javascript FormatNumber函数实现方法
2008/12/30 Javascript
javascript+html5实现绘制圆环的方法
2015/07/28 Javascript
jQuery实现悬浮在右上角的网页客服效果代码
2015/10/24 Javascript
浅谈js中子页面父页面方法 变量相互调用
2016/08/04 Javascript
jQuery实现简易的输入框字数计数功能示例
2017/01/16 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
2017/06/01 Javascript
浅谈vue+webpack项目调试方法步骤
2017/09/11 Javascript
微信公众平台获取access_token的方法步骤
2019/03/29 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
2020/09/10 Javascript
如何使用 vue-cli 创建模板项目
2020/11/19 Vue.js
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
python基础教程之面向对象的一些概念
2014/08/29 Python
python八大排序算法速度实例对比
2017/12/06 Python
Python使用Pickle库实现读写序列操作示例
2018/06/15 Python
Flask模拟实现CSRF攻击的方法
2018/07/24 Python
Python函数定义及传参方式详解(4种)
2019/03/18 Python
Python django框架应用中实现获取访问者ip地址示例
2019/05/17 Python
Python 面向对象静态方法、类方法、属性方法知识点小结
2020/03/09 Python
Python多进程编程multiprocessing代码实例
2020/03/12 Python
TensorFlow保存TensorBoard图像操作
2020/06/23 Python
python全栈开发语法总结
2020/11/22 Python
女性时尚网购:Chic Me
2019/07/30 全球购物
高中生学习总结的自我评价范文
2013/10/13 职场文书
质检部经理岗位职责
2014/02/19 职场文书
保密工作责任书
2014/04/16 职场文书
五好关工委申报材料
2014/05/31 职场文书
中班上学期个人总结
2015/02/12 职场文书
行政处罚事先告知书
2015/07/01 职场文书
《窃读记》教学反思
2016/02/18 职场文书
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS