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