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

Python中的變量賦值

 更新時(shí)間:2021年10月11日 11:27:14   作者:真的會(huì)了嗎  
這篇文章主要介紹了Python中的變量賦值,Python中的變量在使用中很流暢,可以不關(guān)注類型,任意賦值,對(duì)于開(kāi)發(fā)來(lái)說(shuō)效率得到了提升,但不了解其中的機(jī)理,往往也會(huì)犯一些小錯(cuò),讓開(kāi)發(fā)進(jìn)行的不那么流暢,本文就從語(yǔ)言設(shè)計(jì)和底層原理的角度,帶大家理解Python中的變量。

引言:

Python中的變量在使用中很流暢,可以不關(guān)注類型,任意賦值,對(duì)于開(kāi)發(fā)來(lái)說(shuō)效率得到了提升,但若不了解其中的機(jī)理,往往也會(huì)犯一些小錯(cuò),讓開(kāi)發(fā)進(jìn)行的不那么流暢,本文就是從語(yǔ)言設(shè)計(jì)和底層原理的角度,帶大家理解Python中的變量。

下面我們從一個(gè)簡(jiǎn)單例子開(kāi)始:

a = 3

當(dāng)我們代碼中寫(xiě)入a=3時(shí)到底發(fā)生了啥,從概念上來(lái)說(shuō),Python會(huì)執(zhí)行三個(gè)不同的步驟來(lái)完成這個(gè)請(qǐng)求:

  • 創(chuàng)建了一個(gè)對(duì)象來(lái)代表值3
  • 若是a尚未創(chuàng)建會(huì)創(chuàng)建一個(gè)變量a
  • 將變量a和新的對(duì)象3進(jìn)行關(guān)聯(lián),稱變量a為對(duì)象3的一個(gè)引用

上文提到的三個(gè)關(guān)鍵字,“對(duì)象”、“變量”、“引用”是Python中讓變量得以運(yùn)作的關(guān)鍵,我們?cè)谙乱恍」?jié)細(xì)細(xì)道來(lái)。

1 變量、對(duì)象、引用

先從概念說(shuō)起:

對(duì)象是分配的一塊內(nèi)存,有足夠的空間去表示它們所代表的值。

變量是一個(gè)系統(tǒng)表的元素,擁有指向?qū)ο蟮倪B接的空間。

引用時(shí)自動(dòng)形成的從變量到對(duì)象的指針。

接著上文中a=3的三個(gè)步驟,咱們?cè)黾右痪浯a:

a = 3
b = a

下面通過(guò)一張圖表征了兩句話執(zhí)行的結(jié)果:

關(guān)于b=a引發(fā)的操作為b同樣也指向了3,建立了從變量b到對(duì)象3的引用,此部分實(shí)現(xiàn)了python的賦值操作。此部分引出了Python中的賦值操作的秘密,下面咱們先來(lái)看一下為什么Python中變量賦值時(shí)不用指定變量的類型呢,實(shí)際上從上面的概念中已經(jīng)發(fā)現(xiàn)了一個(gè)重要定義:

>>> 類型屬于對(duì)象,而不是變量

為了理解對(duì)象類型是如何使用的,我們看一下對(duì)一個(gè)變量多次賦值的結(jié)果:

a = 3
a = 'wali'
a = 3.1415926

從表面上看,a開(kāi)始是一個(gè)整數(shù),接著變成一個(gè)字符串,最后變成一個(gè)浮點(diǎn),對(duì)于學(xué)習(xí)過(guò)C語(yǔ)言的人來(lái)說(shuō),這個(gè)是無(wú)法理解的,但對(duì)于python來(lái)說(shuō),這是可以執(zhí)行的。看起來(lái)像是a的類型在連續(xù)改變,實(shí)際上我們理解了變量、引用、對(duì)象的概念以及“類型屬于對(duì)象,而不是變量”這些知識(shí)后,我們會(huì)發(fā)現(xiàn),實(shí)際發(fā)生了如下的事情:

執(zhí)行中分別創(chuàng)建了整數(shù)類型的對(duì)象3,字符串的對(duì)象“wali”以及浮點(diǎn)數(shù)的對(duì)象3.14,變量a并不擁有這些類型,只是簡(jiǎn)單的通過(guò)引用分別指向了三個(gè)對(duì)象。

進(jìn)一步深入研究就會(huì)發(fā)現(xiàn),從Python語(yǔ)言實(shí)現(xiàn)的角度來(lái)說(shuō),每個(gè)對(duì)象都包含了一個(gè)頭部信息,其中就標(biāo)識(shí)了這個(gè)對(duì)象的類型。

此外,還有一個(gè)概念“引用計(jì)數(shù)器”,我們?cè)賮?lái)看下,最開(kāi)始的代碼:

a = 3
b = a

可能聰明的讀者已經(jīng)心里默默計(jì)算出對(duì)于對(duì)象3的引用計(jì)數(shù)器的值為2,分別為變量a和變量b對(duì)對(duì)象3的引用。是的,引用計(jì)數(shù)器的定義就是這么明了,用于表征用于指向同一個(gè)對(duì)象的引用的個(gè)數(shù)。通過(guò)變量間的賦值操作,自動(dòng)的計(jì)算對(duì)象的引用計(jì)數(shù)。

那么,我們又會(huì)問(wèn)引用計(jì)數(shù)器有啥用呢,為啥要多此一舉來(lái)計(jì)算有多少個(gè)變量引用同一個(gè)變量呢,此時(shí)我們引出一個(gè)新的概念:對(duì)象的垃圾回收。

2 對(duì)象的垃圾回收機(jī)制

有一段代碼:

a = 3
a = 'wali'
a = 3.1415926

我們會(huì)進(jìn)一步思考,當(dāng)我把a(bǔ)從指向整數(shù)對(duì)象3改變?yōu)橹赶蜃址畬?duì)象‘wali'時(shí),那對(duì)象3發(fā)生了啥 ?難道一直放在內(nèi)存里,如果對(duì)象非常大,那豈不是很占用內(nèi)存,實(shí)際上Python設(shè)計(jì)者早就為我們考慮的很周全了:

Python中,每當(dāng)一個(gè)變量名被賦予了一個(gè)新的對(duì)象,之前的那個(gè)對(duì)象空間就會(huì)被回收(前提為此對(duì)象沒(méi)有被其他的變量名或?qū)ο笏茫?,這種自動(dòng)回收對(duì)象空間的技術(shù)叫做垃圾回收。

這里如何判斷何時(shí)回收,就得用到上一節(jié)所說(shuō)的一個(gè)非常重要的概念,對(duì)象引用計(jì)數(shù)器,當(dāng)計(jì)數(shù)器值為0標(biāo)識(shí)無(wú)變量或?qū)ο笠?,自?dòng)回收對(duì)象空間。到此,我們明白了對(duì)象引用計(jì)數(shù)器的重要作用,也理解了,除了我們看到的代碼,Python也在默默的為我們做不少自動(dòng)化的事情。

3 變量所指向的對(duì)象不同會(huì)有何不同?

#example 1
a = 3
b = a
a = 5 

我們回到上面的例子中,如果a發(fā)生變化,那么b會(huì)跟著發(fā)生變化嗎?理論上指向同一個(gè)對(duì)象是會(huì)跟著發(fā)生變化的,但是這里的答案是不會(huì),因?yàn)閷?duì)象3是數(shù)字,不可變對(duì)象,所以只能重新創(chuàng)建一個(gè)新的對(duì)象5,然后a指向?qū)ο?,但是如果a所指向的對(duì)象是一個(gè)可變的對(duì)象,比如說(shuō)列表,就會(huì)和我們想的一樣b也會(huì)跟著發(fā)生變化,如下面的例子所示:

#example 2
a = [1,2,3]
b = a
a[0] = 3


L = a is b 
>>>True
M  =  a == b
>>>True

那么看下面的例子,例子2 和例子3 有什么區(qū)別呢?

#example 3
a = [1,2,3]
b = [1,2,3]
L = a is b
>>>False
M  =  a == b
>>>True

python中有兩種方法檢測(cè)變量是否相等,is 和 == ,其中==是判斷變量所指向的對(duì)象的值是否相等,is是判斷對(duì)象的同一性,如果兩個(gè)變量精確的指向同一對(duì)象,is操作符才會(huì)返回True,也可以理解為is操作符,是比較實(shí)現(xiàn)引用的指針是否相同,例子2中變量a和變量b指向同一個(gè)對(duì)象,所以L和M都是True,但是例子三中變量a和變量b指向不同的對(duì)象,所以才會(huì)出現(xiàn)例子3下面的L和M的值的不一樣的情況~但是如果下面的例子又會(huì)出現(xiàn)不同的結(jié)果:

#example 4
a = 3
b = 3
L = a is b
>>>True
M  =  a == b
>>>True

#example 5
c = [1,2,3]
K = c[2] is a
>>>True

是為什么呢?因?yàn)? 為不可變對(duì)象,為了節(jié)省內(nèi)存消耗,只會(huì)保留一份,不管有多少個(gè)引用指向?qū)ο?,對(duì)象3都只有一份,例子5也很好的證明了這一點(diǎn)~

例子4和例子5中變量和對(duì)象的引用關(guān)系

課外小知識(shí):

(1)可變類型,值可以改變:主要包括list列表,dict字典;不可變類型,值不可以改變:主要包括:數(shù)值類型intlong、boolfloat,字符串str,元組tuple

在例子3中變量a和b的所指向的對(duì)象為可變對(duì)象,并且a和b的地址不一樣,但是a和b中的元素所指向的對(duì)象其實(shí)是一樣的,如下圖所示

到此這篇關(guān)于Python中的變量賦值的文章就介紹到這了,更多相關(guān)Python變量賦值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python開(kāi)發(fā)網(wǎng)站目錄掃描器的實(shí)現(xiàn)

    Python開(kāi)發(fā)網(wǎng)站目錄掃描器的實(shí)現(xiàn)

    這篇文章主要介紹了Python開(kāi)發(fā)網(wǎng)站目錄掃描器的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • Python 判斷時(shí)間是否在時(shí)間區(qū)間內(nèi)的實(shí)例

    Python 判斷時(shí)間是否在時(shí)間區(qū)間內(nèi)的實(shí)例

    這篇文章主要介紹了Python 判斷時(shí)間是否在時(shí)間區(qū)間內(nèi)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-05-05
  • Python操作Sqlite正確實(shí)現(xiàn)方法解析

    Python操作Sqlite正確實(shí)現(xiàn)方法解析

    我們今天將會(huì)在這篇文章中分步驟為大家詳細(xì)介紹一下有關(guān)Python操作Sqlite的相關(guān)應(yīng)用方式,希望大家可以從中獲得一些幫助
    2020-02-02
  • 簡(jiǎn)單示例入門(mén)了解WxPython教程

    簡(jiǎn)單示例入門(mén)了解WxPython教程

    這篇文章主要通過(guò)演示簡(jiǎn)單示例帶大家入門(mén)了解WxPython,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 基于Python和Scikit-Learn的機(jī)器學(xué)習(xí)探索

    基于Python和Scikit-Learn的機(jī)器學(xué)習(xí)探索

    這篇文章主要介紹了基于Python和Scikit-Learn的機(jī)器學(xué)習(xí)探索的相關(guān)內(nèi)容,小編覺(jué)得還是挺不錯(cuò)的,這里分享給大家,供需要的朋友學(xué)習(xí)和參考。
    2017-10-10
  • Python argparse模塊應(yīng)用實(shí)例解析

    Python argparse模塊應(yīng)用實(shí)例解析

    這篇文章主要介紹了Python argparse模塊應(yīng)用實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • python取代netcat過(guò)程分析

    python取代netcat過(guò)程分析

    本篇文章通過(guò)代碼實(shí)例給大家詳細(xì)分析了python取代netcat過(guò)程,希望我們整理的內(nèi)容能夠幫助到你。
    2018-02-02
  • python中字典(Dictionary)用法實(shí)例詳解

    python中字典(Dictionary)用法實(shí)例詳解

    這篇文章主要介紹了python中字典(Dictionary)用法,以實(shí)例形式較為詳細(xì)的分析了Python字典建立、添加、刪除等常見(jiàn)操作技巧,需要的朋友可以參考下
    2015-05-05
  • python選擇排序算法實(shí)例總結(jié)

    python選擇排序算法實(shí)例總結(jié)

    這篇文章主要介紹了python選擇排序算法,以三個(gè)實(shí)例以不同方法分析了Python實(shí)現(xiàn)選擇排序的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • Python?ttkbootstrap的介紹與使用教程

    Python?ttkbootstrap的介紹與使用教程

    這篇文章主要介紹了Python?ttkbootstrap的介紹與使用,本文僅僅簡(jiǎn)單介紹了ttkbootstrap的使用,而ttkbootstrap可以使我們創(chuàng)建一個(gè)簡(jiǎn)單用戶圖形界面,并對(duì)其可以做一些操作,需要的朋友可以參考下
    2023-03-03

最新評(píng)論

丰县| 仪征市| 阜康市| 澄城县| 金坛市| 汶上县| 莎车县| 陆川县| 苍梧县| 营山县| 荔浦县| 宣化县| 云和县| 鹤岗市| 南澳县| 西乌珠穆沁旗| 池州市| 光泽县| 新建县| 汝城县| 义马市| 合作市| 洱源县| 柳江县| 阿拉尔市| 遵化市| 察哈| 房山区| 阳东县| 隆安县| 麻江县| 肥城市| 福海县| 修武县| 汤阴县| 邹城市| 德安县| 湟源县| 屯留县| 和硕县| 游戏|