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之Python安装
Sep 12 Python
ansible作为python模块库使用的方法实例
Jan 17 Python
numpy 进行数组拼接,分别在行和列上合并的实例
May 08 Python
python用fsolve、leastsq对非线性方程组求解
Dec 15 Python
对Pyhon实现静态变量全局变量的方法详解
Jan 11 Python
python使用梯度下降算法实现一个多线性回归
Mar 24 Python
PyQt5-QDateEdit的简单使用操作
Jul 12 Python
Python 如何在字符串中插入变量
Aug 01 Python
Python 开发工具通过 agent 代理使用的方法
Sep 27 Python
python 提高开发效率的5个小技巧
Oct 19 Python
Selenium Webdriver元素定位的八种常用方式(小结)
Jan 13 Python
python脚本框架webpy模板赋值实现
Nov 20 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笔记之:日期函数的使用介绍
2013/04/24 PHP
PHP中常用的转义函数
2014/02/28 PHP
PHP实现数组array转换成xml的方法
2016/07/19 PHP
showModelessDialog()使用详解
2006/09/21 Javascript
jQuery 行级解析读取XML文件(附源码)
2009/10/12 Javascript
基于jquery的表头固定的若干方法
2011/01/27 Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
2011/10/23 Javascript
js中一个函数获取另一个函数返回值问题探讨
2013/11/21 Javascript
javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)
2013/12/17 Javascript
jQuery获得页面元素的绝对/相对位置即绝对X,Y坐标
2014/03/06 Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
2016/03/11 Javascript
js小数计算小数点后显示多位小数的实现方法
2016/05/30 Javascript
jQuery文字提示与图片提示效果实现方法
2016/07/04 Javascript
原生JS实现《别踩白块》游戏(兼容IE)
2017/02/20 Javascript
微信小程序使用modal组件弹出对话框功能示例
2017/11/29 Javascript
基于JS开发微信网页录音功能的实例代码
2019/04/30 Javascript
JS中使用react-tooltip插件实现鼠标悬浮显示框
2019/05/15 Javascript
[01:19:46]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第一场 2月28日
2021/03/11 DOTA
Python3基础之函数用法
2014/08/13 Python
python django 访问静态文件出现404或500错误
2017/01/20 Python
详解Python中类的定义与使用
2017/04/11 Python
Python 字符串与数字输出方法
2018/07/16 Python
python sorted方法和列表使用解析
2019/11/18 Python
对Tensorflow中tensorboard日志的生成与显示详解
2020/02/04 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
2020/12/04 Python
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
兰芝美国网上商城:购买LANEIGE睡眠面膜等
2017/06/30 全球购物
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
Claire’s法国:时尚配饰、美容、珠宝、头发
2021/01/16 全球购物
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
军人离婚协议书样本
2014/10/21 职场文书
2014年社区计生工作总结
2014/11/18 职场文书
先进教育工作者事迹材料
2014/12/23 职场文书
企业员工辞职信范文
2015/05/12 职场文书
故意杀人罪辩护词
2015/05/21 职场文书
springboot 自定义配置 解决Boolean属性不生效
2022/03/18 Java/Android