91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-10-12 22:05:44 來源:腳本之家 閱讀:141 作者:代碼日志 欄目:開發技術

前言

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

對于別人也是如此.

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兰州市| 拉萨市| 霍山县| 五华县| 高台县| 驻马店市| 开原市| 同仁县| 义马市| 内丘县| 宜章县| 香河县| 宜昌市| 格尔木市| 葫芦岛市| 荆门市| 谷城县| 建始县| 蒙山县| 六枝特区| 神池县| 呼伦贝尔市| 逊克县| 无为县| 呼玛县| 贺兰县| 阳谷县| 曲沃县| 彭山县| 黑河市| 荣昌县| 东乌珠穆沁旗| 安阳县| 格尔木市| 克山县| 安顺市| 泊头市| 新泰市| 北海市| 息烽县| 沾益县|