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 查找文件夹下所有文件 实现代码
Jul 01 Python
Python创建日历实例
Aug 21 Python
python中lambda函数 list comprehension 和 zip函数使用指南
Sep 28 Python
python fabric使用笔记
May 09 Python
Python的Socket编程过程中实现UDP端口复用的实例分享
Mar 19 Python
Python判断两个对象相等的原理
Dec 12 Python
Python 装饰器实现DRY(不重复代码)原则
Mar 05 Python
python中时间转换datetime和pd.to_datetime详析
Aug 11 Python
python标识符命名规范原理解析
Jan 10 Python
解决TensorFlow模型恢复报错的问题
Feb 06 Python
Python3.7将普通图片(png)转换为SVG图片格式(网站logo图标)动起来
Apr 21 Python
linux centos 7.x 安装 python3.x 替换 python2.x的过程解析
Dec 14 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中去除所有js,html,css代码
2010/10/12 PHP
PHP中设置一个严格30分钟过期Session面试题的4种答案
2014/07/30 PHP
[原创]php简单防盗链验证实现方法
2016/07/09 PHP
Yii视图CGridView列表用法实例分析
2016/07/12 PHP
php 防止表单重复提交两种实现方法
2016/11/03 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
2018/04/08 PHP
Jquery 基础学习笔记之文档处理
2009/05/29 Javascript
JS request函数 用来获取url参数
2010/05/17 Javascript
jquery验证手机号码、邮箱格式是否正确示例代码
2013/07/28 Javascript
js清除input中type等于file的值域(示例代码)
2013/12/24 Javascript
论JavaScript模块化编程
2016/03/07 Javascript
全面了解构造函数继承关键apply call
2016/07/26 Javascript
jquery实现焦点轮播效果
2017/02/23 Javascript
JavaScript的六种继承方式(推荐)
2017/06/26 Javascript
Javasript设计模式之链式调用详解
2018/04/26 Javascript
微信小程序基于canvas渐变实现的彩虹效果示例
2019/05/03 Javascript
layui table设置某一行的字体颜色方法
2019/09/05 Javascript
js判断鼠标移入移出方向的方法
2020/06/24 Javascript
JavaScript ES 模块的使用
2020/11/12 Javascript
Python标准库之sqlite3使用实例
2014/11/25 Python
Python随机生成数模块random使用实例
2015/04/13 Python
Python爬取qq music中的音乐url及批量下载
2017/03/23 Python
python itchat实现微信好友头像拼接图的示例代码
2017/08/14 Python
python3实现名片管理系统
2020/11/29 Python
用Python从0开始实现一个中文拼音输入法的思路详解
2019/07/20 Python
Python语言异常处理测试过程解析
2020/01/08 Python
python实现与redis交互操作详解
2020/04/21 Python
Python中flatten( ),matrix.A用法说明
2020/07/05 Python
Python3爬虫mitmproxy的安装步骤
2020/07/29 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
文明学生标兵事迹
2014/01/21 职场文书
学雷锋演讲稿汇总
2014/05/10 职场文书
办公室岗位职责
2015/02/04 职场文书
2015年教学副校长工作总结
2015/07/22 职场文书
如何利用 CSS Overview 面板重构优化你的网站
2021/10/24 HTML / CSS
Pygame Time时间控制的具体使用详解
2021/11/17 Python