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程序员
Jun 12 Python
Python实现八大排序算法
Aug 13 Python
简单实现python数独游戏
Mar 30 Python
解决Python2.7读写文件中的中文乱码问题
Apr 12 Python
使用numba对Python运算加速的方法
Oct 15 Python
Python3.5字符串常用操作实例详解
May 01 Python
Python基于BeautifulSoup和requests实现的爬虫功能示例
Aug 02 Python
Python判断字符串是否xx开始或结尾的示例
Aug 08 Python
python socket 聊天室实例代码详解
Nov 14 Python
Python计算不规则图形面积算法实现解析
Nov 22 Python
Python3列表List入门知识附实例
Feb 09 Python
python json.dumps中文乱码问题解决
Apr 01 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/03/21 PHP
PHP中比较两个字符串找出第一个不同字符位置例子
2014/04/08 PHP
php单文件版在线代码编辑器
2015/03/12 PHP
PHP截取发动短信内容的方法
2017/07/04 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
2017/08/07 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
JS实多级联动下拉菜单类,简单实现省市区联动菜单!
2007/05/03 Javascript
(function($){...})(jQuery)的意思
2010/07/22 Javascript
用JQUERY增删元素的代码
2012/02/14 Javascript
escape编码与unescape解码汉字出现乱码的解决方法
2014/07/02 Javascript
实现js保留小数点后N位的代码
2014/11/13 Javascript
PHP 数组current和next用法分享
2015/03/05 Javascript
JavaScript简单判断复选框是否选中及取出值的方法
2015/08/13 Javascript
js淡入淡出的图片轮播效果代码分享
2015/08/24 Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
2016/07/22 Javascript
jQuery简单注册和禁用全局事件的方法
2016/07/25 Javascript
JavaScript结合HTML DOM实现联动菜单
2017/04/05 Javascript
js用类封装pop弹窗组件
2017/10/08 Javascript
微信小程序左右滑动的实现代码
2017/12/15 Javascript
详解tween.js 中文使用指南
2018/01/05 Javascript
小程序api实现promise封装过程解析
2019/11/21 Javascript
vue学习之Vue-Router用法实例分析
2020/01/06 Javascript
Python3字符串学习教程
2015/08/20 Python
Python采用Django开发自己的博客系统
2020/09/29 Python
python 使用值来排序一个字典的方法
2018/11/16 Python
对Python捕获控制台输出流的方法详解
2019/01/07 Python
Omio西班牙:全欧洲低价大巴、火车和航班搜索和比价
2017/02/11 全球购物
Sasa莎莎海外旗舰店:香港莎莎美妆平台
2018/03/21 全球购物
高分子材料与工程专业推荐信
2013/12/01 职场文书
聊城大学毕业生自荐书
2014/02/01 职场文书
4s店活动策划方案
2014/08/25 职场文书
干部个人对照检查材料
2014/08/25 职场文书
师德标兵事迹材料
2014/12/19 职场文书
2015年社区重阳节活动总结
2015/07/30 职场文书
iPhone13 Pro外观确定,升级4800万镜头,4月20日发新品
2021/04/15 数码科技
Mysql存储过程、触发器、事件调度器使用入门指南
2022/01/22 MySQL