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

Python 字符串池化的前提

 更新時(shí)間:2020年07月03日 15:59:11   作者:Leetao  
這篇文章主要介紹了Python 字符串池化的前提,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

前言

在 Python 中經(jīng)常通過內(nèi)存池化技術(shù)來(lái)提高其性能,那么問題來(lái)了,在什么情況下會(huì)池化呢? 讓我們通過幾個(gè)例子進(jìn)行一下理解一下.

預(yù)備知識(shí)

在查看例子之前,首先要提 python 中的一個(gè)函數(shù) id(),讓我們看一下函數(shù)說(shuō)明:

id(obj, /)
  Return the identity of an object.

  This is guaranteed to be unique among simultaneously existing objects.
  (CPython uses the object \'s memory address.)

通過上述說(shuō)明,可以得知 id() 將會(huì)返回對(duì)像的唯一標(biāo)識(shí),在 CPython 中將會(huì)返回內(nèi)存地址,也就是說(shuō)如果兩個(gè)對(duì)象 的 id 值一樣,可以說(shuō)著兩個(gè)對(duì)象是相同的了.

例子

example 00

a = ""
b = ""
print(id(a),id(b))
print(a is b)

輸出結(jié)果:

>>> a = ""
>>> b = ""
>>> print(id(a),id(b))
2114853370544 2114853370544
>>> print(a is b)
True

example 01

a = "a"
b = "a"
print(id(a),id(b))
print(a is b)

輸出結(jié)果:

>>> a = "a"
>>> b = "a"
>>> print(id(a),id(b))
2114883022608 2114883022608
>>> print(a is b)
True

example 02

a = "magic_string"
b = "magic" + "_" + "string"
print(id(a),id(b))
print(a is b)

輸出結(jié)果:

>>> a = "magic_string"
>>> b = "magic" + "_" + "string"
>>> print(id(a),id(b))
2114887161136 2114887161136
>>> print(a is b)
True

example 03

a = "magic!"
b = "mgaic!"
print(id(a),id(b))
print(a is b)

輸出結(jié)果:

>>> a = "magic!"
>>> b = "mgaic!"
>>> print(id(a),id(b))
2114885855416 2114889455408
>>> print(a is b)
False

example 04

a,b = "magic!","magic!"
print(id(a),id(b))
print(a is b)

輸出結(jié)果:
>>> a,b = "magic!","magic!"
>>> print(id(a),id(b))
2114885691912 2114885691912
>>> print(a is b)
True

example 05

a = "!"
b = "!"
print(id(a),id(b))
print(a is b)

輸出結(jié)果:

>>> a = "!"
>>> b = "!"
>>> print(id(a),id(b))
140564571922024 140564571922024
>>> print(a is b)
True

example 06

print(a*20 is 'aaaaaaaaaaaaaaaaaaaa')
print(a*21 is 'aaaaaaaaaaaaaaaaaaaaa')

輸出結(jié)果:

>>> print(a*20 is 'aaaaaaaaaaaaaaaaaaaa')
False
>>> print(a*21 is 'aaaaaaaaaaaaaaaaaaaaa')
False

總結(jié)

通過上述 7 個(gè)例子,我們不難對(duì) python 的字符串池化有個(gè)大概的認(rèn)識(shí),我們這里做個(gè)簡(jiǎn)單的總結(jié):

  1. 通過 example 00,01,05,我們可以得出對(duì)于長(zhǎng)度為 0 或者 1 的字符串會(huì)被池化
  2. 通過 example 02,03,我們可以得出字符串中只包含字母數(shù)字以及下劃線的字符串會(huì)被池化
  3. 通過 example 04, 我們可以得出當(dāng)在同一行對(duì)不同變量,賦值如果相同的話,它們將會(huì)指向同一個(gè)對(duì)象,注意這里面的 “magic!” 并不符合池化的要求,這只是一種編譯器的優(yōu)化
  4. example 06 所出現(xiàn)的現(xiàn)象在 python 中有一個(gè)專業(yè)的術(shù)語(yǔ),講常量折疊(constant folding),顧名思義,在編譯優(yōu)化時(shí),講能夠計(jì)算出的結(jié)果的變量直接替換為常量.但是這沒有限制嗎?顯然不是的,在我們的例子中已經(jīng)發(fā)現(xiàn),當(dāng)長(zhǎng)度超過20的時(shí)候,折疊就會(huì)失效了,試想一下,如果沒有限制的話,初始化的字符串過長(zhǎng),將會(huì)嚴(yán)重導(dǎo)致性能的下降以及內(nèi)存的消耗

參考鏈接

The internals of Python string interning

exploring python code objects

Python string interning

Python String objects implementation

以上就是Python 字符串池化的前提的詳細(xì)內(nèi)容,更多關(guān)于Python 字符串池化的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python如何使用argparse模塊處理命令行參數(shù)

    Python如何使用argparse模塊處理命令行參數(shù)

    這篇文章主要介紹了Python如何使用argparse模塊處理命令行參數(shù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Python 查詢學(xué)生的平均分?jǐn)?shù)的實(shí)現(xiàn)

    Python 查詢學(xué)生的平均分?jǐn)?shù)的實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了Python 查詢學(xué)生的平均分?jǐn)?shù)的實(shí)現(xiàn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • 淺析Python中元祖、列表和字典的區(qū)別

    淺析Python中元祖、列表和字典的區(qū)別

    Python中有三種內(nèi)建的數(shù)據(jù)結(jié)構(gòu):列表、元祖和字典,這篇文章對(duì)這三種數(shù)據(jù)結(jié)構(gòu)進(jìn)行了分別的介紹與實(shí)例演示,讓大家更簡(jiǎn)潔明了的了解這三個(gè)之間的區(qū)別,下面一起來(lái)看看。
    2016-08-08
  • Python 自制簡(jiǎn)單版《我的世界》的詳細(xì)過程

    Python 自制簡(jiǎn)單版《我的世界》的詳細(xì)過程

    這篇文章主要介紹了教你用 Python 自制簡(jiǎn)單版《我的世界》,接下來(lái),我們就帶你運(yùn)行這個(gè)項(xiàng)目,并對(duì)這個(gè)開源的小游戲做一下簡(jiǎn)單的更改,讓它變成“你的”世界
    2021-11-11
  • 詳解pandas的外部數(shù)據(jù)導(dǎo)入與常用方法

    詳解pandas的外部數(shù)據(jù)導(dǎo)入與常用方法

    這篇文章主要介紹了詳解pandas的外部數(shù)據(jù)導(dǎo)入與常用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Python自動(dòng)化辦公之Excel數(shù)據(jù)的寫入

    Python自動(dòng)化辦公之Excel數(shù)據(jù)的寫入

    這篇文章主要為大家詳細(xì)介紹一下Python中excel的寫入模塊- xlsxwriter,并利用該模塊實(shí)現(xiàn)Excel數(shù)據(jù)的寫入,感興趣的小伙伴可以了解一下
    2022-05-05
  • Python中異常捕獲與處理的方法總結(jié)

    Python中異常捕獲與處理的方法總結(jié)

    Python異常是在程序執(zhí)行時(shí)發(fā)生的錯(cuò)誤,可能會(huì)導(dǎo)致程序終止運(yùn)行。這篇文章主要為大家總結(jié)了Python中異常捕獲與處理的方法,需要的可以參考一下
    2023-04-04
  • 淺析python參數(shù)的知識(shí)點(diǎn)

    淺析python參數(shù)的知識(shí)點(diǎn)

    在本文里小編給大家分享的是關(guān)于python參數(shù)的知識(shí)點(diǎn)內(nèi)容,正在學(xué)習(xí)的讀者們跟著思考下吧。
    2018-12-12
  • python利用while求100內(nèi)的整數(shù)和方式

    python利用while求100內(nèi)的整數(shù)和方式

    這篇文章主要介紹了 python利用while求100內(nèi)的整數(shù)和方式,下面文章要描述的內(nèi)容有1到100的和、1到100內(nèi)的偶數(shù)和、1到100內(nèi)的奇數(shù)和,具體詳細(xì)內(nèi)容,需要的朋友可以參考一下
    2021-11-11
  • Appium自動(dòng)化測(cè)試實(shí)現(xiàn)九宮格解鎖

    Appium自動(dòng)化測(cè)試實(shí)現(xiàn)九宮格解鎖

    本文主要介紹了Appium自動(dòng)化測(cè)試實(shí)現(xiàn)九宮格解鎖,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評(píng)論

收藏| 南和县| 成武县| 京山县| 宽甸| 玛曲县| 高尔夫| 馆陶县| 讷河市| 来宾市| 房山区| 青铜峡市| 尚义县| 江城| 安徽省| 卢湾区| 浮山县| 凤翔县| 嘉鱼县| 福清市| 平安县| 长海县| 云龙县| 辽阳县| 都江堰市| 临泉县| 苗栗县| 临清市| 牡丹江市| 甘肃省| 延寿县| 深圳市| 万全县| 郓城县| 永寿县| 望都县| 普安县| 襄汾县| 尉氏县| 潮州市| 安康市|