python 元組比較大小_為什么元組比列表更快?

所報道的“build設速度”比率只適用于常量元組(項目用文字表示)。 仔細觀察(并在機器上重復 – 只需在shell /命令窗口input命令!)…:

$ python3.1 -mtimeit -s'x,y,z=1,2,3' '[x,y,z]' 1000000 loops, best of 3: 0.379 usec per loop $ python3.1 -mtimeit '[1,2,3]' 1000000 loops, best of 3: 0.413 usec per loop $ python3.1 -mtimeit -s'x,y,z=1,2,3' '(x,y,z)' 10000000 loops, best of 3: 0.174 usec per loop $ python3.1 -mtimeit '(1,2,3)' 10000000 loops, best of 3: 0.0602 usec per loop $ python2.6 -mtimeit -s'x,y,z=1,2,3' '[x,y,z]' 1000000 loops, best of 3: 0.352 usec per loop $ python2.6 -mtimeit '[1,2,3]' 1000000 loops, best of 3: 0.358 usec per loop $ python2.6 -mtimeit -s'x,y,z=1,2,3' '(x,y,z)' 10000000 loops, best of 3: 0.157 usec per loop $ python2.6 -mtimeit '(1,2,3)' 10000000 loops, best of 3: 0.0527 usec per loop

我沒有在3.0上進行測量,因為當然我沒有它 – 它已經完全過時了,完全沒有理由保留它,因為3.1在各方面都優于它(Python 2.7,如果你可以升級到2.6,在每個任務中的速度比2.6快了近20%,正如你所看到的,速度比3.1快 – 所以,如果你關心性能的話,Python 2.7真的是唯一的版本要去!)。

無論如何,關鍵在于,在每個Python發行版中,從常量字面值構build列表的速度大致相同,或者稍微低于通過variables引用的值構build列表; 但是元組的performance卻非常不同 – 從常量字面值構build元組的速度通常比構buildvariables引用的值快3倍! 你可能想知道這是怎么回事吧?)

答案:由常量字面值構成的元組可以很容易地被Python編譯器識別為一個不變的常量字面本身:所以它本質上是一次構build的,當編譯器將源代碼變成字節碼時,隱藏在“常量表” “的相關function或模塊。 當這些字節碼執行時,他們只需要恢復預build的常量元組 – 嘿presto! – )

這個簡單的優化不能應用到列表中,因為列表是一個可變對象,所以至關重要的是,如果相同的expression式如[1, 2, 3]執行兩次(在一個循環中 – timeit模塊使循環開啟你的代表;-),每次都重新構造一個新的列表對象,而且構造(如編譯器無法簡單地將其識別為編譯時常量和不可變對象時構造的元組)需要一點時間。

也就是說,元組構造(當兩個構造實際上必須發生時)仍然是列表構造的兩倍 – 這種差異可以用元組的簡單性來解釋,其他答案已經多次提到。 但是,這種簡單性并沒有考慮到六倍或六倍以上的加速,正如你所觀察到的,如果你只是將列表和元組的構造與簡單的常量文字作為它們的項目進行比較,

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/536824.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/536824.shtml
英文地址,請注明出處:http://en.pswp.cn/news/536824.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

windows軟鏈接的建立及刪除

2019獨角獸企業重金招聘Python工程師標準>>> 1.建立舉例 # 建立d:develop鏈接目錄,指向遠程的目標服務器上的e盤的對應目錄。 mklink /d d:\develop \\138.20.1.141\e$\develop# 建立d:develop鏈接目錄,指向遠程的目標服務器上的e盤的對應目錄…

php原生類,反序列化之PHP原生類的利用

正文文章圍繞著一個問題,如果在代碼審計中有反序列化點,但是在原本的代碼中找不到pop鏈該如何?N1CTF有一個無pop鏈的反序列化的題目,其中就是找到php內置類來進行反序列化。基礎知識首先還是來回顧一下序列化中的魔術方法,下面也…

Spectral Bounds for Sparse PCA: Exact and Greedy Algorithms[貪婪算法選特征]

目錄 概括Sparse PCA Formulation非常普遍的問題Optimality ConditionsEigenvalue Bounds算法代碼概括 這篇論文,不像以往的那些論文,構造優化問題,然后再求解這個問題(一般都是凸化)。而是,直接選擇某些特…

js php調用webservice,php調用web services兩種方法soap和curl

以http://www.webxml.com.cn/zh_cn/index.aspx一、使用soap調用//服務器支持soap擴展:/*Example 1:$client new SoapClient("http://fy.webxml.com.cn/webservices/EnglishChinese.asmx?wsdl");$parameters array("wordKey">"test");//中英…

JS基礎-3

1.for in 對象中有多少組鍵值對,我們的FOR IN 循環就遍歷多少次(不一定) 每一次循環KEY這個變量存儲的都是當前循環這組鍵對值的屬性名 1、KEY存儲的值都是字符串格式的(不管屬性名是否為數字) 2、在FOR IN 循環遍歷的時候,大部分瀏覽器都是先把對象中的鍵值對進行排…

Python常用的幾個函數

print()函數:用于打印輸出信息到控制臺。 input()函數:用于從控制臺獲取用戶輸入。 len()函數:用于獲取字符串、列表、元組、字典等對象的長度。 range()函數:用于生成一個整數序列,常用于循環中。 type()函數&…

數據結構——常見的定義

問題答案Ο標記法(大Ο標記法)是一種用于衡量算法時間復雜度的表示方法。它描述了算法在最壞情況下的運行時間增長率。當我們使用Ο標記法時,我們關注的是算法的上界,即算法的運行時間不會超過Ο(f(n)),其中 f(n) 是輸…

TikTok與環保:短視頻如何引領可持續生活方式?

在數字時代,社交媒體平臺扮演著塑造文化和價值觀的關鍵角色。而TikTok,作為一款全球短視頻平臺,不僅塑造著用戶的娛樂方式,還在悄然地引領著可持續生活方式的潮流。本文將深入探討TikTok與環保之間的關系,分析短視頻如…

Spring源碼分析---Bean 的生命周期 03

來源:Spring 3. Bean 的生命周期 自定義一個 SpringBoot 的主啟動類: SpringBootApplication public class A03Application {public static void main(String[] args) {ConfigurableApplicationContext context SpringApplication.run(A03Applicatio…

go-carbon v2.3.0 圣誕特別版發布,輕量級、語義化、對開發者友好的 Golang 時間處理庫

go-carbon v2.3.0 圣誕節特別版發布,這應該是 2023 年的最后一個版本,祝大家圣誕節快樂! carbon 是一個輕量級、語義化、對開發者友好的 golang 時間處理庫,支持鏈式調用。 目前已被 awesome-go 收錄,如果您覺得不錯…

pytorch 實現 Restormer 主要模塊(多頭通道自注意力機制和門控制結構)

前面的博文讀論文:Restormer: Efficient Transformer for High-Resolution Image Restoration 介紹了 Restormer 網絡結構的網絡技術特點,本文用 pytorch 實現其中的主要網絡結構模塊。 1. MDTA(Multi-Dconv Head Transposed Attention:多頭…

選擇免費的SSL證書,還是付費的?

作為一個互聯網文章作者,我會根據具體的使用場景和需求來選擇SSL證書。通常情況下,如果是用于個人網站或者小型項目,我會傾向于選擇免費的SSL證書,比如 JoySSL提供的免費證書。這樣可以在不增加額外費用的情況下為網站提供安全的加…

靜態HTTP與CDN:如何優化內容分發

大家好,今天我們來聊聊靜態HTTP和CDN這對“黃金搭檔”。沒錯,就是那個讓你的網站內容像閃電一樣傳遍全球的CDN! 首先,我們來了解一下靜態HTTP。它就像是那個老實可靠的郵差,每次都按時按點地把你的內容送到用戶手中。…

第二十一章博客

計算機應用實現了多臺計算機間的互聯,使得它們彼此之間能夠進行數據交流。網絡應用程序就是在已連接的不同計算機上運行的程序,這些程序借助于網絡協議,相互之間可以交換數據。編寫網絡應用程序前,首先必須明確所要使用的網絡協議…

Node.js中處理特殊字符的文件名,安全穩妥的方案

在Node.js中,通過path模塊提供的basename方法,我們可以輕松地從文件路徑中提取文件名。然而,這個方法在處理特殊字符時存在一些問題,因為它會對這些字符進行轉義,導致在不同操作系統上的兼容性問題。在這篇文章中&…

C++ boost planner_cond_.wait(lock) 報錯1225

1.如下程序段 boost unique_lock doesn’t own the mutex: Operation not permitted 問題: 其中makePlan是一個線程。這里的unlock導致錯誤這個報錯 boost unique_lock doesn’t own the mutex: Operation not permitted bool navigation::makePlan(){ //cv::named…

MySQL中如何快速定位占用CPU過高的SQL

作為DBA工作中都會遇到過數據庫服務器CPU飆升的場景,我們該如何快速定位問題?又該如何快速找到具體是哪個SQL引發的CPU異常呢?下面我們說兩個方法。聊聊MySQL中如何快速定位占用CPU過高的SQL。 技術人人都可以磨煉,但處理問題的思…

華為OD機試 - 多段線數據壓縮(Java JS Python C)

在線OJ刷題 題目詳情 - 多段線數據壓縮 - Hydro 題目描述 下圖中,每個方塊代表一個像素,每個像素用其行號和列號表示。 為簡化處理,多線段的走向只能是水平、豎直、斜向45度。 上圖中的多線段可以用下面的坐標串表示:(2,8),(3,7),(3,6),(3,5),(4,4),(5,3),(6,2),(7,3),(…

042、序列模型

之——從時序中獲取信息 目錄 之——從時序中獲取信息 雜談 正文 1.建模 2.方案A-馬爾科夫假設 3.方案B-潛變量模型 4.簡單實現 雜談 很多連續的數據都是有前后的時間相關性的,并不是每一個單獨的數據是隨機出現的。在時序中會蘊含一些空間結構的變化信息、…

【數據科學】一文徹底理清數據、數據類型、數據結構的概念

一、什么是數據? 入門數據學科,首先第一步要認識數據什么,可能大多數人都無法對數據做一個準確的定義,在我們印象中,提到數據首先頭腦浮現的是數據表格,是一堆堆數字,那么數據就是數字嗎&#x…