最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python超詳細(xì)講解內(nèi)存管理機(jī)制

 更新時(shí)間:2022年06月28日 10:04:18   作者:henry_rhy  
本章主要介紹Pyhon的內(nèi)存管理,以Pyhon的計(jì)數(shù)機(jī)制作為引入,介紹Pyhon的內(nèi)存管理方式,感興趣的朋友來看看吧

什么是內(nèi)存管理機(jī)制

python中創(chuàng)建的對象的時(shí)候,首先會(huì)去申請內(nèi)存地址,然后對對象進(jìn)行初始化,所有對象都會(huì)維護(hù)在一

個(gè)叫做refchain的雙向循環(huán)鏈表中,每個(gè)數(shù)據(jù)都保存如下信息:

 1. 鏈表中數(shù)據(jù)前后數(shù)據(jù)的指針
 2. 數(shù)據(jù)的類型
 3. 數(shù)據(jù)值
 4. 數(shù)據(jù)的引用計(jì)數(shù)
 5. 數(shù)據(jù)的長度(list,dict..)

一、引用計(jì)數(shù)機(jī)制

引用計(jì)數(shù)增加:

1.1 對象被創(chuàng)建

1.2 對象被別的變量引用(另外起了個(gè)名字)

1.3 對象被作為元素,放在容器中(比如被當(dāng)作元素放在列表中)

1.4 對象被當(dāng)成參數(shù)傳遞到函數(shù)中

import sys
a = [11,22]        # 對象被創(chuàng)建
b = a             # 對象被別的變量引用
c = [111,222,333,a]        # 對象被作為元素,放在容器中
# 獲取對象的引用計(jì)數(shù)
print(sys.getrefcount(a))     # 對象被當(dāng)成參數(shù)傳遞到函數(shù)中

最后的執(zhí)行結(jié)果是,a 這個(gè)變量被引用了4次

引用計(jì)數(shù)減少:

  • 對象的別名被顯式的銷毀
  • 對象的一個(gè)別名被賦值給其他對象 (例:比如原來的a=10,被改成a=100,此時(shí)10的引用計(jì)數(shù)就減少了)
  • 對象從容器中被移除,或者容器被銷毀(例:對象從列表中被移除,或者列表被銷毀)
  • 一個(gè)引用離開了它的作用域(調(diào)用函數(shù)的時(shí)候傳進(jìn)去的參數(shù),在函數(shù)運(yùn)行結(jié)束后,該參數(shù)的引用即被銷毀)
import sys
del b      # 對象的別名被顯式的銷毀
b = 999        # 對象的一個(gè)別名被賦值給其他對象
del c      # 列表被銷毀(容器被銷毀)
c.pop()    # 把列表數(shù)據(jù)最后一個(gè)刪除掉(對象從容器中被移除)

二、數(shù)據(jù)池和緩存

數(shù)據(jù)池分為兩種:小整數(shù)池 和 大整數(shù)池

小整數(shù)池(-5到256之間的數(shù)據(jù))

運(yùn)行機(jī)制:Python自動(dòng)將 -5~256 的整數(shù)進(jìn)行了緩存到一個(gè)小整數(shù)池中,當(dāng)你將這些整數(shù)賦值給變量時(shí),并不會(huì)重新

創(chuàng)建對象,而是使用已經(jīng)創(chuàng)建好的緩存對象,當(dāng)刪除這些數(shù)據(jù)的引用時(shí),也不會(huì)進(jìn)行回收

超出-5到256的整數(shù)將不會(huì)在在緩存,會(huì)重新創(chuàng)建對象

例如:

對于超出-5到256的整數(shù)將不會(huì)在在緩存,Python會(huì)重新創(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ù)池(字符串駐留池 / intern機(jī)制)

優(yōu)點(diǎn):在創(chuàng)建新的字符串對象時(shí),會(huì)先在緩存池里面找是否有已經(jīng)存在的值相同的對象(標(biāo)識符,即只包含數(shù)字、字母、下劃線的字符串),如果有,則直接拿過來用(引用),避免頻繁的創(chuàng)建和銷毀內(nèi)存,提升效率

例如:

對于不在標(biāo)識符內(nèi)的數(shù)據(jù)將不會(huì)在在緩存,Python會(huì)重新創(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 不一樣

緩存機(jī)制

對于python中常用內(nèi)置數(shù)據(jù)類型的緩存:

float:緩存100個(gè)對象

list: 80個(gè)對象

dict: 80個(gè)對象

set: 80個(gè)對象

元組:會(huì)根據(jù)元組數(shù)據(jù)的長度,分別緩存元組長度為0-20的對象

到此這篇關(guān)于Python超詳細(xì)講解內(nèi)存管理機(jī)制的文章就介紹到這了,更多相關(guān)Python內(nèi)存管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python 實(shí)現(xiàn)過濾掉列表中唯一值

    Python 實(shí)現(xiàn)過濾掉列表中唯一值

    這篇文章主要介紹了Python 實(shí)現(xiàn)過濾掉列表中唯一值,文章內(nèi)容主要利用Python代碼實(shí)現(xiàn)過濾掉列表中的唯一值的功能,需要的朋友可以參考一下
    2021-11-11
  • VSCode設(shè)置類似Pycharm控制臺運(yùn)行Python顯示中間變量的步驟

    VSCode設(shè)置類似Pycharm控制臺運(yùn)行Python顯示中間變量的步驟

    這篇文章主要介紹了如何在VSCode中設(shè)置調(diào)試功能,以實(shí)現(xiàn)類似于Pycharm在控制臺輸出中間變量的功能,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • python 打印dict的key與value方式

    python 打印dict的key與value方式

    這篇文章主要介紹了python 打印dict的key與value方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python中if __name__ == ''__main__''作用解析

    Python中if __name__ == ''__main__''作用解析

    這篇文章主要介紹了Python中if __name__ == '__main__'作用解析,這斷代碼在Python中非常常見,它有作用?本文就解析了它的作用,需要的朋友可以參考下
    2015-06-06
  • Python爬蟲使用瀏覽器cookies:browsercookie過程解析

    Python爬蟲使用瀏覽器cookies:browsercookie過程解析

    這篇文章主要介紹了Python爬蟲使用瀏覽器cookies:browsercookie,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • 最新評論

    南投市| 清流县| 依安县| 瓦房店市| 定日县| 贡嘎县| 平湖市| 澄江县| 沾化县| 敦煌市| 库伦旗| 保德县| 平遥县| 曲麻莱县| 忻州市| 台北县| 饶河县| 齐齐哈尔市| 瑞安市| 南丰县| 仙桃市| 专栏| 抚松县| 保亭| 奇台县| 洛扎县| 望江县| 兴化市| 平和县| 平山县| 淄博市| 壤塘县| 渑池县| 峨眉山市| 尤溪县| 宝鸡市| 黑山县| 芦山县| 彝良县| 琼结县| 东海县|