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 相关文章推荐
Win10下Python环境搭建与配置教程
Nov 18 Python
Python开发的实用计算器完整实例
May 10 Python
python互斥锁、加锁、同步机制、异步通信知识总结
Feb 11 Python
django 发送手机验证码的示例代码
Apr 25 Python
详解Django中类视图使用装饰器的方式
Aug 12 Python
使用Python在Windows下获取USB PID&VID的方法
Jul 02 Python
Python 词典(Dict) 加载与保存示例
Dec 06 Python
Python 实现网课实时监控自动签到、打卡功能
Mar 12 Python
解决Pycharm 中遇到Unresolved reference 'sklearn'的问题
Jul 13 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
Sep 30 Python
Python模拟登录和登录跳转的参考示例
Oct 30 Python
Django集成MongoDB实现过程解析
Dec 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
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
Yii2框架实现数据库常用操作总结
2017/02/08 PHP
使用jquery插件实现图片延迟加载技术详细说明
2011/03/12 Javascript
JS中 用户登录系统的解决办法
2013/04/15 Javascript
javascript获取url上某个参数的方法
2013/11/08 Javascript
jquery禁用右键单击功能屏蔽F5刷新
2014/03/17 Javascript
JavaScript避免代码的重复执行经验技巧分享
2014/04/17 Javascript
详解AngularJS 路由 resolve用法
2017/04/24 Javascript
5分钟打造简易高效的webpack常用配置
2017/07/04 Javascript
JavaScript变量类型以及变量作用域详解
2017/08/14 Javascript
基于vue.js中事件修饰符.self的用法(详解)
2018/02/23 Javascript
PM2自动部署代码步骤流程总结
2018/12/10 Javascript
vue el-tree 默认展开第一个节点的实现代码
2020/05/15 Javascript
vue+elementUI(el-upload)图片压缩,默认同比例压缩操作
2020/08/10 Javascript
[57:55]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第二场 12.12
2020/12/16 DOTA
跟老齐学Python之编写类之一创建实例
2014/10/11 Python
六个窍门助你提高Python运行效率
2015/06/09 Python
Python3中条件控制、循环与函数的简易教程
2017/11/21 Python
python实现AES加密和解密
2019/03/27 Python
python实现一行输入多个值和一行输出多个值的例子
2019/07/16 Python
Python爬虫爬取Bilibili弹幕过程解析
2019/10/10 Python
Python类反射机制使用实例解析
2019/12/30 Python
用Python生成HTML表格的方法示例
2020/03/06 Python
中国双语服务优势的在线购票及活动平台:247tickets
2018/10/26 全球购物
ColourPop美国官网:卡拉泡泡,洛杉矶彩妆品牌
2019/04/28 全球购物
Bluebella法国官网:英国性感内衣品牌
2019/05/03 全球购物
Puma印度官网:德国运动品牌
2019/10/06 全球购物
销售自我评价
2013/10/22 职场文书
担保书怎么写
2014/04/01 职场文书
主要领导对照检查材料
2014/08/26 职场文书
化工实习心得体会
2014/09/09 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
公司合作协议范文
2014/10/01 职场文书
2016关于读书活动的心得体会
2016/01/14 职场文书
如何写好闭幕词
2019/04/02 职场文书
Python 视频画质增强
2022/04/28 Python