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

詳解python的變量緩存機(jī)制

 更新時間:2021年01月24日 09:35:35   作者:小小垂髫  
這篇文章主要介紹了python的變量緩存機(jī)制,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

變量的緩存機(jī)制

變量的緩存機(jī)制(以下內(nèi)容僅對python3.6.x版本負(fù)責(zé))

機(jī)制

只要有兩個值相同,就只開辟一個空間

為什么要有這樣的機(jī)制

在計算機(jī)的硬件當(dāng)中,內(nèi)存是最重要的配置之一,直接關(guān)系到程序的運(yùn)行速度和流暢度。在過去計算機(jī)內(nèi)存資源昂貴而小的年代中,程序的內(nèi)存管理成為編程中的重要技術(shù)之一。python沒有C/C++中的指針那樣的定義可以編程者自主的控制內(nèi)存的分配,而是有一套自動的內(nèi)存地址分配和緩存機(jī)制。在這個機(jī)制當(dāng)中,可以把一些相同值的變量在內(nèi)存中指向同一塊區(qū)域,而不再重新開辟一個空間,這樣就達(dá)到了節(jié)省內(nèi)存的目的。


python中使用id()函數(shù)查看數(shù)據(jù)的內(nèi)存地址

number部分

整型

對于整型而言,-5~~正無窮的范圍內(nèi)的相同值的id地址一致

# 在后續(xù)的版本中所有的數(shù)的id地址都一致

# 相同
print(id(9999999), id(9999999))
print(id(100), id(100))
print(id(-5), id(-5))

# 不同
print(id(-6), id(-6))

浮點型

對于浮點型而言,非負(fù)數(shù)范圍內(nèi)的相同值id一致

# 相同
print(id(9999999.0), id(9999999.0))
print(id(100.0), id(100.0))

# 不同
print(id(-5.0), id(-5.0))
print(id(-6.0), id(-6.0))

布爾值

對于布爾值而言,值相同測情況下,id一致

# 相同
print(id(True), id(True))
print(id(False), id(False))

復(fù)數(shù)

復(fù)數(shù)在(實數(shù)+虛數(shù))這樣的結(jié)構(gòu)當(dāng)中永不相同,只有單個虛數(shù)相同才會一致

# 相同
print(id(1j), id(1j))
print(id(0j), id(0j))

# 不同
print(id(1234j), id(3456j))
print(id(1+1j), id(1+1j))
print(id(2+0j), id(2+0j))

容器部分

字符串

字符串在相同的情況下,地址相同

# 相同
print(id('hello '), id("hello "))

# 不同
print(id('msr'), id('wxd'))

字符串配合使*號使用有特殊的情況:

乘數(shù)為1:只要數(shù)據(jù)相同,地址就是相同的

# 等于1,和正常的情況下是一樣的,只要值相同地址就是一樣的
a = 'hello ' * 1
b = 'hello ' * 1
print(a is b)
a = '祖國' * 1
b = '祖國' * 1
print(a is b)

乘數(shù)大于1:只有僅包含數(shù)字、字母、下劃線時地址是相同的,而且字符串的長度不能大于20

# 純數(shù)字字母下劃線,且長度不大于20
a = '_70th' * 3
b = '_70th' * 3
c = '_70th_70th_70th'
print(a, id(a), len(a))
print(b, id(b), len(b))
print(c, id(c), len(c))
print(a is b is c)
'''
結(jié)果:
_70th_70th_70th 1734096389168 15
_70th_70th_70th 1734096389168 15
_70th_70th_70th 1734096389168 15
True
'''
# 純數(shù)字字母下劃線,長度大于20
a = 'motherland_70th' * 3
b = 'motherland_70th' * 3
c = 'motherland_70thmotherland_70thmotherland_70th'
print(a, id(a), len(a))
print(b, id(b), len(b))
print(c, id(c), len(c))
print(a is b is c)
'''
結(jié)果:
motherland_70thmotherland_70thmotherland_70th 2281801354864 45
motherland_70thmotherland_70thmotherland_70th 2281801354960 45
motherland_70thmotherland_70thmotherland_70th 2281801354768 45
False
'''
# 有其它字符,且長度不大于20
a = '你好' * 3
b = '你好' * 3
c = '你好你好你好'
print(a, id(a), len(a))
print(b, id(b), len(b))
print(c, id(c), len(c))
print(a is b is c)
'''
結(jié)果:
你好你好你好 3115902573360 6
你好你好你好 3115902573448 6
你好你好你好 3115900671904 6
False
'''

字符串指定駐留

使用sys模塊中的intern函數(shù),讓變量指向同一個地址,只要字符串的值是相同的,無論字符的類型、長度、變量的數(shù)量,都指向同一個內(nèi)存地址。

語法:intern(string)

from sys import intern

a = intern('祖國70華誕: my 70th birthday of the motherland' * 1000)
b = intern('祖國70華誕: my 70th birthday of the motherland' * 1000)
c = intern('祖國70華誕: my 70th birthday of the motherland' * 1000)
d = intern('祖國70華誕: my 70th birthday of the motherland' * 1000)
e = intern('祖國70華誕: my 70th birthday of the motherland' * 1000)

print(a is b is c is d is e)

元組

元組只有為空的情況下,地址相同

# 相同
print(id(()), id(tuple()))

# 不同
print(id((1, 2)), id((1, 2)))

列表、集合、字典

任何情況下,地址都不會相同

# 列表、非空元組、集合、字典 無論在聲明情況下,id表示都不會相同

# 不同
print(id([]), id([]))
print(id(set()), id(set()))
print(id({}), id({}))

總結(jié)

# -->Number 部分
1.對于整型而言,-5~正無窮范圍內(nèi)的相同值 id一致
2.對于浮點數(shù)而言,非負(fù)數(shù)范圍內(nèi)的相同值 id一致
3.布爾值而言,值相同情況下,id一致
4.復(fù)數(shù)在 實數(shù)+虛數(shù) 這樣的結(jié)構(gòu)中永不相同(只有虛數(shù)的情況例外,只有虛數(shù)的虛數(shù)相同才會id一致)

# -->容器類型部分
5.字符串 和 空元組 相同的情況下,地址相同
6.列表,元組,字典,集合無論什么情況 id標(biāo)識都不同 [空元組例外]

小數(shù)據(jù)池

以下內(nèi)容僅對python3.6.8負(fù)責(zé)

數(shù)據(jù)在同一個文件(模塊)當(dāng)中,變量存儲的的緩存機(jī)制就是上述的那樣。

但是如果是在不同文件(模塊)當(dāng)中的數(shù)據(jù),部分?jǐn)?shù)據(jù)就會駐留在小數(shù)據(jù)池當(dāng)中。

什么是小數(shù)據(jù)池

不同的python文件(模塊)中的相同數(shù)據(jù)的本應(yīng)該是不在同一個內(nèi)存地址當(dāng)中的, 而是應(yīng)該全新的開辟一個新空間,但是這樣就造成了內(nèi)存的空間壓力,所以python定義了小數(shù)據(jù)池的概念,默認(rèn)允許小部分?jǐn)?shù)據(jù)即使在不同的文件當(dāng)中,只要數(shù)據(jù)相同就可以使用同一個內(nèi)存空間,節(jié)省內(nèi)存。

小數(shù)據(jù)池支持什么類型

小數(shù)據(jù)池只針對:int、bool、None關(guān)鍵字 ,這些數(shù)據(jù)類型有效。

int

對于int而言,python在內(nèi)存中創(chuàng)建了-5 ~ 256 范圍的整數(shù),提前駐留在了內(nèi)存的一塊區(qū)域,如果是不同文件(模塊)的兩個變量,聲明同一個值,在-5~256這個范圍里,那么id一致,兩個變量的值都同時指向一個值的地址,節(jié)省空間。

# 現(xiàn)在我們打開兩個終端,進(jìn)入python環(huán)境中,然后執(zhí)行下面的指令,你會發(fā)現(xiàn),只有-5 ~ 256范圍內(nèi)的整型的id值相同,而不是之前說過的是-5 ~ 正無窮的范圍,這是因為,兩個終端環(huán)境就相當(dāng)于兩個python文件或者是模塊。

print(id(1000))
print(id(500))
print(id(257))
print(id(256))
print(id(-5))
print(id(-6))

其它

布爾、None這些類型都是有效的

# 開啟兩個終端測試吧
print(id(True))
print(id(False))
print(id(None))

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

相關(guān)文章

  • 一分鐘帶你上手Python調(diào)用DeepSeek的API

    一分鐘帶你上手Python調(diào)用DeepSeek的API

    最近DeepSeek非?;?作為一枚對前言技術(shù)非常關(guān)注的程序員來說,自然都想對接DeepSeek的API來體驗一把,下面小編就來為大家介紹一下Python如何快速上手調(diào)用DeepSeek?API吧
    2025-02-02
  • python常用web框架簡單性能測試結(jié)果分享(包含django、flask、bottle、tornado)

    python常用web框架簡單性能測試結(jié)果分享(包含django、flask、bottle、tornado)

    這篇文章主要介紹了python常用web框架簡單性能測試結(jié)果分享(包含django、flask、bottle、tornado),需要的朋友可以參考下
    2014-08-08
  • 詳解tensorflow載入數(shù)據(jù)的三種方式

    詳解tensorflow載入數(shù)據(jù)的三種方式

    這篇文章主要介紹了詳解tensorflow載入數(shù)據(jù)的三種方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • python 實現(xiàn)aes256加密

    python 實現(xiàn)aes256加密

    這篇文章主要介紹了python 如何實現(xiàn)aes256加密,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下
    2020-11-11
  • 樹莓派4B安裝Tensorflow的方法步驟

    樹莓派4B安裝Tensorflow的方法步驟

    這篇文章主要介紹了樹莓派4B安裝Tensorflow的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 安裝python-docx后,無法在pycharm中導(dǎo)入的解決方案

    安裝python-docx后,無法在pycharm中導(dǎo)入的解決方案

    這篇文章主要介紹了安裝python-docx后,無法在pycharm中導(dǎo)入的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • python實現(xiàn)按長寬比縮放圖片

    python實現(xiàn)按長寬比縮放圖片

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)按長寬比縮放圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • opencv 攝像機(jī)標(biāo)定的實現(xiàn)

    opencv 攝像機(jī)標(biāo)定的實現(xiàn)

    本文主要介紹了opencv 攝像機(jī)標(biāo)定的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-02-02
  • 淺談Keras的Sequential與PyTorch的Sequential的區(qū)別

    淺談Keras的Sequential與PyTorch的Sequential的區(qū)別

    這篇文章主要介紹了淺談Keras的Sequential與PyTorch的Sequential的區(qū)別,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python?Matplotlib通過plt.subplots創(chuàng)建子繪圖

    Python?Matplotlib通過plt.subplots創(chuàng)建子繪圖

    這篇文章主要介紹了Python?Matplotlib通過plt.subplots創(chuàng)建子繪圖,plt.subplots調(diào)用后將會產(chǎn)生一個圖表和默認(rèn)網(wǎng)格,與此同時提供一個合理的控制策略布局子繪圖,更多相關(guān)需要的朋友可以參考下面文章內(nèi)容
    2022-07-07

最新評論

亳州市| 永靖县| 布尔津县| 应用必备| 黄浦区| 绵阳市| 苍南县| 望谟县| 天全县| 云安县| 顺平县| 长丰县| 金堂县| 岳阳县| 兴仁县| 深圳市| 习水县| 阿坝县| 武威市| 龙海市| 泸定县| 历史| 吴桥县| 德庆县| 鹤峰县| 枣强县| 榆社县| 浙江省| 大石桥市| 吉木乃县| 北川| 资讯 | 包头市| 崇州市| 饶阳县| 弥勒县| 阿合奇县| 西丰县| 教育| 永胜县| 新余市|