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中的列表推导浅析
Apr 26 Python
python的re模块应用实例
Sep 26 Python
简单介绍Python中的filter和lambda函数的使用
Apr 07 Python
python实现判断数组是否包含指定元素的方法
Jul 15 Python
windows环境下tensorflow安装过程详解
Mar 30 Python
利用pyinstaller将py文件打包为exe的方法
May 14 Python
python:动态路由的Flask程序代码
Nov 22 Python
flask的orm框架SQLAlchemy查询实现解析
Dec 12 Python
解决pycharm中导入自己写的.py函数出错问题
Feb 12 Python
Python模拟登入的N种方式(建议收藏)
May 31 Python
Python数据相关系数矩阵和热力图轻松实现教程
Jun 16 Python
Python实现中英文全文搜索的示例
Dec 04 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 翻页 实例代码
2009/08/07 PHP
PHP实现时间轴函数代码
2011/10/08 PHP
PHP如何通过AJAX方式实现登录功能
2015/11/23 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
2016/03/21 PHP
php正则修正符用法实例详解
2016/12/29 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
2019/10/18 PHP
JavaScript 编程引入命名空间的方法
2007/06/29 Javascript
Js 获取当前日期时间及其它操作实现代码
2021/03/04 Javascript
jQuery 1.5.1 发布,全面支持IE9 修复大量bug
2011/02/26 Javascript
基于jquery实现图片广告轮换效果代码
2011/07/07 Javascript
EasyUI 中 MenuButton 的使用方法
2012/07/14 Javascript
JavaScript的setAttribute兼容性问题解决方法
2013/11/11 Javascript
多个jQuery版本共存的处理方案
2015/03/17 Javascript
JQuery显示、隐藏div的几种方法简明总结
2015/04/16 Javascript
javascript实现密码验证
2015/11/10 Javascript
JavaScript使用forEach()与jQuery使用each遍历数组时return false 的区别
2016/08/26 Javascript
bootstrap日历插件datetimepicker使用方法
2016/12/14 Javascript
Node.js实现mysql连接池使用事务自动回收连接的方法示例
2018/02/03 Javascript
JS实现头条新闻的经典轮播图效果示例
2019/01/30 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
Vue.directive 实现元素scroll逻辑复用
2019/11/29 Javascript
uniapp 仿微信的右边下拉选择弹出框的实现代码
2020/07/12 Javascript
python 中文字符串的处理实现代码
2009/10/25 Python
Python中多线程的创建及基本调用方法
2016/07/08 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
解决pycharm无法识别本地site-packages的问题
2018/10/13 Python
Python3中lambda表达式与函数式编程讲解
2019/01/14 Python
Python学习笔记之While循环用法分析
2019/08/14 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
基于python使用tibco ems代码实例
2019/12/20 Python
django执行原始查询sql,并返回Dict字典例子
2020/04/01 Python
美国著名的户外用品品牌:L.L.Bean
2018/01/05 全球购物
allbeauty美国:英国在线美容店
2019/03/11 全球购物
业务副厂长岗位职责
2014/01/03 职场文书
求职信的正确写法
2014/07/10 职场文书