本文主要是詳細介紹Pyhon的代碼優(yōu)化,以Pyhon的記數(shù)體制做為引進,詳細介紹Pyhon的代碼優(yōu)化方法,感興趣的小伙伴來了解一下吧
什么是內(nèi)存管理模式
python中建立的目標情況下,都會先進行申請基址,再對目標開展復(fù)位,全部目標都是會維護保養(yǎng)在同一個
個稱為refchain的雙重循環(huán)鏈表中,每一個數(shù)據(jù)儲存如下所示信息內(nèi)容:
import sys a=[11,22]#對象被創(chuàng)建 b=a#對象被別的變量引用 c=[111,222,333,a]#對象被作為元素,放在容器中 #獲取對象的引用計數(shù) print(sys.getrefcount(a))#對象被當成參數(shù)傳遞到函數(shù)中
1.單鏈表中數(shù)據(jù)前后左右數(shù)據(jù)庫的指示針
2.數(shù)據(jù)的類型
3.數(shù)據(jù)值
4.數(shù)據(jù)庫的引用計數(shù)
5.數(shù)據(jù)庫的長短(list,dict..)
import sys
del b#對象的別名被顯式的銷毀
b=999#對象的一個別名被賦值給其他對象
del c#列表被銷毀(容器被銷毀)
c.pop()#把列表數(shù)據(jù)最后一個刪除掉(對象從容器中被移除)
一、引用計數(shù)體制
引用計數(shù)提升:
1.1目標被建立
1.2目標被其他自變量引入(此外取了個名稱)
1.3目標被認為是原素,放到容器里(比如被當做原素放到頁面上)
1
1.4目標被當做傳遞數(shù)據(jù)到函數(shù)中
importsys a=[11,22]#目標被建立 b=a#目標被其他自變量引入 c=[111,222,333,a]#目標被認為是原素,放到容器里 #獲取對象的引用記數(shù) print(sys.getrefcount(a))#目標被當做傳遞數(shù)據(jù)到函數(shù)中
最后的執(zhí)行結(jié)果是,a這個自變量被引用了4次
引用計數(shù)減少:
目標別名被顯式的消毀
目標一個別名被賦值給其他目標(例:比如原來的a=10,被改成a=100,此時10的引用計數(shù)就減少了)
目標從容器里被移除,或者容器被消毀(例:目標從頁面上被移除,或者列表被消毀)
一個引入離開了它的作用域(調(diào)用函數(shù)的時候傳進去的參數(shù),在函數(shù)運行結(jié)束后,該參數(shù)的引入即被消毀)
importsys
delb#目標別名被顯式的消毀
b=999#目標一個別名被賦值給其他目標
delc#列表被消毀(容器被消毀)
c.pop()#把列表數(shù)據(jù)最后一個刪除掉(目標從容器里被移除)
二、數(shù)據(jù)池和緩存文件
數(shù)據(jù)池分為兩種:小整數(shù)金額池和大整數(shù)金額池
小整數(shù)金額池(-5到256之間的信息)
運行機制:Python自動將-5~256的整數(shù)金額進行了緩存文件到一個小整數(shù)金額池中,當你將這些整數(shù)金額賦值給自變量時,并不會重新
創(chuàng)建對象,而是使用早已建立好的緩存文件目標,當刪除這些數(shù)據(jù)的引入時,也不會開展回收
超出-5到256的整數(shù)金額將無法在緩存文件,會再次創(chuàng)建對象
比如:
針對超出-5到256的整數(shù)金額將無法在緩存文件,Python會再次創(chuàng)建對象,回到id
#情景1:數(shù)據(jù)為列表,沒有在-5~256的范圍 >>>a=[11] >>>b=[11] >>>id(a),id(b) (1693226918600,1693231858248)========》id不同 #情景二:數(shù)據(jù)為整數(shù)金額,在-5~256的范圍 >>>aa=11 >>>bb=11 >>>id(aa),id(bb) (140720470385616,140720470385616)id同樣 #情景三:數(shù)據(jù)沒有在-5~256的范圍 >>>bb=-7 >>>aa=-7 >>>id(aa),id(bb) (1843518717904,1843518717776)id不同 #情景四:數(shù)據(jù)沒有在-5~256的范圍 >>>a=257 >>>b=257 >>>id(a),id(b) (2092420910928,2092420911056)id不同
大整數(shù)金額池(字符串數(shù)組停留池/intern機制)
優(yōu)勢:在建立一個新的字符串對象時,首先會在緩存文件池里邊找是否存在早已存有的值同樣對象(標志符,即只包括數(shù)據(jù)、英文字母、下橫線的字符串數(shù)組),若是有,則立即拿出來用(引入),防止頻繁地建立和消毀運存,提升工作效率
比如:
針對沒有在標志符內(nèi)的信息將無法在緩存文件,Python會再次創(chuàng)建對象,回到id
#情景1: >>>a='123adsf_' >>>b='123adsf_' >>>id(a),id(b) (61173296,61173296)========》id同樣 #情景二: >>>b1='123adsf_?' >>>b2='123adsf_?' >>>id(b1),id(b2) (61173376,61173416)id不同 #場景1:數(shù)據(jù)為列表,不在-5~256的范圍 >>>a=[11] >>>b=[11] >>>id(a),id(b) (1693226918600,1693231858248)========》id不一樣 #場景二:數(shù)據(jù)為整數(shù),在-5~256的范圍 >>>aa=11 >>>bb=11 >>>id(aa),id(bb) (140720470385616,140720470385616)id一樣 #場景三:數(shù)據(jù)不在-5~256的范圍 >>>bb=-7 >>>aa=-7 >>>id(aa),id(bb) (1843518717904,1843518717776)id不一樣 #場景四:數(shù)據(jù)不在-5~256的范圍 >>>a=257 >>>b=257 >>>id(a),id(b) (2092420910928,2092420911056)id不一樣
緩存機制
針對python中常見內(nèi)嵌基本數(shù)據(jù)類型的緩存文件:
float:緩存文件100個目標
list:80個目標
dict:80個目標
set:80個目標
#場景1: >>>a='123adsf_' >>>b='123adsf_' >>>id(a),id(b) (61173296,61173296)========》id一樣 #場景二: >>>b1='123adsf_?' >>>b2='123adsf_?' >>>id(b1),id(b2) (61173376,61173416)id不一樣 數(shù)組:會依據(jù)數(shù)組數(shù)據(jù)庫的長短,各自緩存文件數(shù)組長短為0-20對象
綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家?guī)韼椭?/p>
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/128852.html
摘要:讓你收獲滿滿碼個蛋從年月日推送第篇文章一年過去了已累積推文近篇文章,本文為年度精選,共計篇,按照類別整理便于讀者主題閱讀。本篇文章是今年的最后一篇技術(shù)文章,為了讓大家在家也能好好學習,特此花了幾個小時整理了這些文章。 showImg(https://segmentfault.com/img/remote/1460000013241596); 讓你收獲滿滿! 碼個蛋從2017年02月20...
摘要:且本小白也親身經(jīng)歷了整個從小白到爬蟲初入門的過程,因此就斗膽在上開一個欄目,以我的圖片爬蟲全實現(xiàn)過程為例,以期用更簡單清晰詳盡的方式來幫助更多小白應(yīng)對更大多數(shù)的爬蟲實際問題。 前言: 一個月前,博主在學過python(一年前)、會一點網(wǎng)絡(luò)(能按F12)的情況下,憑著熱血和興趣,開始了pyth...
摘要:至于怎樣下載付費網(wǎng)易云音樂,還是開個會員吧,要知道免費是最貴的的這個道理。代碼寫完了,那還等什么,運行一下裝逼啊這下好了,裝逼失敗,被網(wǎng)易云認出來我是爬蟲的,那我試試加下請求頭結(jié)果加了還是一個樣,這個也算是個巨坑吧。 前兩天教了大家如何在控制臺上找到真實的mp3播放地址,但是不可以下載付費的,因為只能下載可播放的歌曲。至于怎樣下載付費網(wǎng)易云音樂,還是開個會員吧,要知道免費是最貴的的這個...
摘要:兩數(shù)之和暴力求解首先我們需要有一個目標列表,并且有一個目標值。如果列表中的某兩個數(shù)之和,正好等于我們的目標值,那么就會反回那兩個數(shù)的索引。 兩數(shù)之和----------暴力求解 首先我們需要有一個目標列表,并且有一個目標值。如果列表中的某兩個數(shù)之和,正好等于我們的目標值,那么就會反回那兩個數(shù)...
閱讀 923·2023-01-14 11:38
閱讀 895·2023-01-14 11:04
閱讀 756·2023-01-14 10:48
閱讀 2055·2023-01-14 10:34
閱讀 961·2023-01-14 10:24
閱讀 840·2023-01-14 10:18
閱讀 510·2023-01-14 10:09
閱讀 588·2023-01-14 10:02