国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python復制列表時[:]和[::]之間有什么區別

2020-02-15 23:13:54
字體:
來源:轉載
供稿:網友

前言

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 disdis('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            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 石城县| 台南市| 宁明县| 邵武市| 东源县| 莆田市| 承德市| 凯里市| 汝城县| 文登市| 青龙| 卫辉市| 古交市| 德安县| 浦北县| 通渭县| 儋州市| 锡林浩特市| 太和县| 贺兰县| 昂仁县| 万源市| 东阳市| 通渭县| 海兴县| 开封县| 资溪县| 明水县| 伊宁县| 巨野县| 孝感市| 巴南区| 甘洛县| 进贤县| 宜春市| 鸡泽县| 洛隆县| 栖霞市| 延长县| 黄浦区| 泾川县|