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中遍历文件的3个方法
Sep 02 Python
python中as用法实例分析
Apr 30 Python
Python中list列表的一些进阶使用方法介绍
Aug 15 Python
怎么使用pipenv管理你的python项目
Mar 12 Python
Python中py文件引用另一个py文件变量的方法
Apr 29 Python
matplotlib subplots 设置总图的标题方法
May 25 Python
Django实现支付宝付款和微信支付的示例代码
Jul 25 Python
python实现给scatter设置颜色渐变条colorbar的方法
Dec 13 Python
Python基于opencv实现的简单画板功能示例
Mar 04 Python
学习Python列表的基础知识汇总
Mar 10 Python
Python使用lambda抛出异常实现方法解析
Aug 20 Python
详解Java中一维、二维数组在内存中的结构
Feb 11 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代码
2006/12/06 PHP
PHP,ASP.JAVA,JAVA代码格式化工具整理
2010/06/15 PHP
PHP中空字符串介绍0、null、empty和false之间的关系
2012/09/25 PHP
php定义数组和使用示例(php数组的定义方法)
2014/03/29 PHP
php结合md5的加密解密算法实例
2016/09/30 PHP
PHP抽象类与接口的区别详解
2019/03/21 PHP
Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
2011/10/29 Javascript
showModalDialog在谷歌浏览器下会返回Null的解决方法
2013/11/27 Javascript
jquery插件lazyload.js延迟加载图片的使用方法
2014/02/19 Javascript
js实现发送验证码后的倒计时功能
2015/05/28 Javascript
微信小程序 地图定位简单实例
2016/10/14 Javascript
常用的javascript设计模式
2017/01/11 Javascript
在 Angular6 中使用 HTTP 请求服务端数据的步骤详解
2018/08/06 Javascript
Three.js实现3D机房效果
2018/12/30 Javascript
jQuery事件绑定和解绑、事件冒泡与阻止事件冒泡及弹出应用示例
2019/05/13 jQuery
详解vue 在移动端体验上的优化解决方案
2019/05/20 Javascript
原生js canvas实现鼠标跟随效果
2020/08/02 Javascript
JavaScript this关键字指向常用情况解析
2020/09/02 Javascript
Python自动登录126邮箱的方法
2015/07/10 Python
django2.0扩展用户字段示例
2019/02/13 Python
对pyqt5中QTabWidget的相关操作详解
2019/06/21 Python
谈一谈数组拼接tf.concat()和np.concatenate()的区别
2020/02/07 Python
Pygame的程序开始示例代码
2020/05/07 Python
聊聊python中的异常嵌套
2020/09/01 Python
python 日志模块logging的使用场景及示例
2021/01/04 Python
phpquery中文手册
2021/03/18 PHP
JD Sports德国官网:英国领先的运动鞋和运动服饰零售商
2018/02/26 全球购物
财务管理专业毕业生求职信范文
2013/09/21 职场文书
新员工入职感言
2014/02/01 职场文书
公司总经理工作职责管理办法
2014/02/28 职场文书
淘宝店策划方案
2014/06/07 职场文书
学校与家长安全责任书
2014/07/23 职场文书
十一国庆节“向国旗敬礼”主题班会活动方案
2014/09/27 职场文书
超市员工管理制度
2015/08/06 职场文书
Python批量将csv文件转化成xml文件的实例
2021/05/10 Python
Python图像处理库PIL详细使用说明
2022/04/06 Python