欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談對Python變量的一些認(rèn)識(shí)理解

 更新時(shí)間:2021年05月17日 15:23:08   作者:軟件技術(shù)學(xué)習(xí)開發(fā)愛好者  
變量(variable)是編程的基礎(chǔ)概念,Python 的變量看似簡單,深入了解卻不易.文中有非常詳細(xì)的介紹及代碼示例,對正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下

一、Python變量

在大多數(shù)語言中,為一個(gè)值起一個(gè)名字時(shí),把這種行為稱為“給變量賦值”或“把值存儲(chǔ)在變量中”。不過,Python與許多其它計(jì)算機(jī)語言的有所不同,它并不是把值存儲(chǔ)在變量中,而像是把名字“貼”在值的上邊(專業(yè)一點(diǎn)說法是將名字綁定了對象)。所以,有些Python程序員會(huì)說Python沒有變量,只有名字,通過名字找到它代表的值。

 Python中的變量,與其它開發(fā)語言(如C語言)的不同:

在C語言中,變量類似于一個(gè)“容器”,賦給它的值,裝在容器中:

定義一個(gè)變量 int a = 1;

給變量a重新賦值 a = 2;

把變量a賦值給另外一個(gè)變量b ,int b = a;

會(huì)重新創(chuàng)建一個(gè)變量b(容器),將a中的內(nèi)容復(fù)制粘貼至b中。

在python,變量類似于名字標(biāo)簽“貼”在值上面,通過名字找到它代表的值。

定義一個(gè)變量 a = 1

給變量a重新賦值 a = 2

把變量a賦值給另外一個(gè)變量b, b = a

創(chuàng)建新的便利貼b,與a同時(shí)貼到值上

為了對python中變量的這種情況加深認(rèn)識(shí),下面適度展開介紹。

1.1 第一點(diǎn)

先說明第一點(diǎn):變量的實(shí)現(xiàn)方式有:引用語義、值語義

python語言中變量的實(shí)現(xiàn)方式就是引用語義,在變量里面保存的是值(對象)的引用(值所在處內(nèi)存空間的地址)。采用這種方式,變量所需的存儲(chǔ)空間大小一致,因?yàn)槠渲兄恍枰4嬉粋€(gè)引用。而有些語言(例如c)采用的不是這種方式,它們把變量直接保存在變量的存儲(chǔ)區(qū)里,這種方式就稱為值語義。這樣的話,一個(gè)整數(shù)類型的變量就需要保存一個(gè)整數(shù)所需要的空間(例如c語言中int類型占用4個(gè)字節(jié)大?。?。

python中變量與對象的引用關(guān)系類似于c語言的指針變量與指向地址之間的關(guān)系。

在python的數(shù)據(jù)結(jié)構(gòu)中,對象分為可變對象和不可變對象。基本數(shù)據(jù)類型如int、float,元祖tuple、str是不可變對象;list(列表)、dict(字典)、set(集合)是可變對象,可變對象存儲(chǔ)的元素的引用其實(shí)是沒有改變的,改變的是其引用指向的值。

采用引用語義存儲(chǔ)的只是一個(gè)變量的值所在的內(nèi)存地址,而不是這個(gè)變量的值本身。

1.2 第二點(diǎn)

現(xiàn)在說明第二點(diǎn):Python中的變量、對象、引用三者之間的關(guān)系。

在Python里一切皆對象。Python中,對象具有三要素:標(biāo)識(shí)(identity)、類型(type)、值(value)。

☆標(biāo)識(shí)(identity):

用于唯一標(biāo)識(shí)對象,通常對應(yīng)對象在計(jì)算機(jī)內(nèi)存中的地址。使用內(nèi)置函數(shù)id(obj)返回對象唯一標(biāo)識(shí)。

☆類型(type):

類型可以限制對象的取值范圍和可執(zhí)行的操作。使用內(nèi)置函數(shù)type(obj)返回對象所屬類型。

對象中含有標(biāo)準(zhǔn)的頭部信息:類型標(biāo)識(shí)符。標(biāo)識(shí)對象類型,表示對象存儲(chǔ)的數(shù)據(jù)的類型。

每一個(gè)對象都有兩個(gè)標(biāo)準(zhǔn)的頭部信息:

1.類型標(biāo)識(shí)符,去標(biāo)識(shí)對象的(數(shù)據(jù))類型;

2.引用計(jì)數(shù)器,記錄當(dāng)前對象的引用的數(shù)目。

(回收機(jī)制:變量的引用計(jì)數(shù)器為0,自動(dòng)清理。 ※ 較小整數(shù)型對象有緩存機(jī)制。)

☆值(value):

表示對象存儲(chǔ)的數(shù)據(jù)的信息。使用內(nèi)置函數(shù)print(obj)可以直接打印值。

Python中,變量用來指向任意的對象,是對象的引用。Python變量更像是指針(或者說Python變量更像“貼簽”),而不是數(shù)據(jù)存儲(chǔ)區(qū)域(而不是數(shù)據(jù)“容器”)。

Python 中的變量不是裝有對象的“容器”,而是貼在對象上的“標(biāo)簽”——給一個(gè)變量賦值,把這個(gè)標(biāo)簽貼到一個(gè)對象上,重新賦值,是撕下標(biāo)簽貼到另一個(gè)對象上。

在python中,變量保存的是對象(值)的引用,采用這種方式,變量的每一次初始化,都開辟了一個(gè)新的空間,將新內(nèi)容的地址賦值給變量。id()函數(shù)可以獲取變量在內(nèi)存中的地址。我們把不同的值賦給變量時(shí)候,地址發(fā)生變化,相同的值地址不發(fā)生變化。下面給出示例:

【順便提示:id()的值不是固定不變的——此值系統(tǒng)為對象分配的內(nèi)存地址,在你練習(xí)時(shí)顯示的不同值是正常的。】

下面是字符串的示例:

在Python中,值可以放在內(nèi)存的某個(gè)位置(地址),變量用于引用它們,給變量賦一個(gè)新值,原值不會(huì)被新值覆蓋,變量只是引用了新值。順便說明,Python的垃圾回收機(jī)制會(huì)自動(dòng)清理不再被用到的值,所以不用擔(dān)心計(jì)算機(jī)內(nèi)存中充滿被“丟棄”的無效的值。

1.3 第三點(diǎn)

現(xiàn)在說明第三點(diǎn):可變(mutable) 類型對象、不可變(immutable) 類型對象

可變類型對象,指對象可以在其 id() 保持固定的情況下改變其取值。

不可變類型對象,指具有固定值的對象。不可變對象包括數(shù)字(numbers)、字符串(strings)和元組(tuples)。這樣的對象不能被改變。如果必須存儲(chǔ)一個(gè)不同的值,則必須創(chuàng)建新的對象。不可變對象不允許對自身內(nèi)容進(jìn)行修改。如果我們對一個(gè)不可變對象進(jìn)行賦值,實(shí)際上是生成一個(gè)新對象,再讓變量指向這個(gè)對象。哪怕這個(gè)對象簡單到只是數(shù)字 0 和 1。

由于 Python 中的變量存放的是對象引用,所以對于不可變對象而言,盡管對象本身不可變,但變量的對象引用是可變的。運(yùn)用這樣的機(jī)制,有時(shí)候會(huì)讓人產(chǎn)生糊涂,似乎可變對象變化了。如下面的代碼:

i = 73 

i += 2

不可變的對象的特征沒有變,依然是不可變對象,變的只是創(chuàng)建了新對象,改變了變量的對象引用。參見下圖:

對于可變對象,其對象的內(nèi)容是可以變化的。當(dāng)對象的內(nèi)容發(fā)生變化時(shí),變量的對象引用是不會(huì)變化的。如下面的例子。

m=[5,9] 

m+=[6]

參見下圖:

二、總結(jié)

Python變量指的是名字綁定了對象(綁定就是將一個(gè)對象與一個(gè)名字聯(lián)系起來)。

綁定時(shí),變量就是名字。

使用時(shí),變量代表對象的引用。

變量改變的只有綁定關(guān)系。

深入學(xué)習(xí):

https://docs.python.org/zh-cn/3.9/reference/datamodel.html#objects-values-and-types

補(bǔ)充說明:

對復(fù)雜的數(shù)據(jù)類型(列表、集合、字典),如果添加某一項(xiàng)元素,或者添加幾個(gè)元素,不會(huì)改變其本身的地址,只會(huì)改變其內(nèi)部元素的地址引用,但是如果對其重新賦值時(shí),就會(huì)重新賦予地址覆蓋就地址,這時(shí)地址就會(huì)發(fā)生改變。示例代碼如下:

list_ = [1,2,3,4]
print(list_, id(list_))
list_.append(5)
print(list_, id(list_))
#如上代碼,因?yàn)閍ppend前后的list_仍然是同一個(gè)對象,只是對象的值發(fā)了改變,所以地址不變。
 
#再如下面的代碼
print(list_, id(list_), id(list_[1]))#打印列表、列表的地址、第二個(gè)元素的地址
list_[1] = 'aaa'   #修改列表
print(list_, id(list_), id(list_[1]))#打印列表、列表的地址、第二個(gè)元素的地址
#不難發(fā)發(fā)現(xiàn):列表變了、列表的地址沒有變、列表內(nèi)部元素變了、列表內(nèi)部元素的地址變了

測試運(yùn)行如下圖所示:

到此這篇關(guān)于淺談對Python變量的一些認(rèn)識(shí)理解的文章就介紹到這了,更多相關(guān)Python變量內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python教程之基本運(yùn)算符的使用(上)

    Python教程之基本運(yùn)算符的使用(上)

    Python?運(yùn)算符通常用于對值和變量執(zhí)行操作。這些是用于邏輯和算術(shù)運(yùn)算的標(biāo)準(zhǔn)符號(hào)。在本文中,我們將研究不同類型的?Python?運(yùn)算符,感興趣的可以了解一下
    2022-09-09
  • Python實(shí)現(xiàn)切割mp3片段并降低碼率

    Python實(shí)現(xiàn)切割mp3片段并降低碼率

    MoviePy是一個(gè)基于Python的視頻編輯庫,它提供了創(chuàng)建、編輯、合并、剪輯和轉(zhuǎn)換視頻的功能,所以本文主要介紹如何使用moviepy來分割音頻流并降低碼率,感興趣的可以了解下
    2023-08-08
  • python實(shí)現(xiàn)把兩個(gè)二維array疊加成三維array示例

    python實(shí)現(xiàn)把兩個(gè)二維array疊加成三維array示例

    今天小編就為大家分享一篇python實(shí)現(xiàn)把兩個(gè)二維array疊加成三維array示例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python中的推導(dǎo)式使用詳解

    Python中的推導(dǎo)式使用詳解

    這篇文章主要介紹了Python中的推導(dǎo)式使用詳解,本文分別講解了列表推導(dǎo)式、字典推導(dǎo)式、集合推導(dǎo)式使用實(shí)例,需要的朋友可以參考下
    2015-06-06
  • 如何用python將文件夾內(nèi)多個(gè)excel表格合并成總表

    如何用python將文件夾內(nèi)多個(gè)excel表格合并成總表

    前幾天遇見這么一個(gè)問題,手上有很多張表格,這些表格中都只有一個(gè)sheet,需要把這些表匯總到一張表,下面這篇文章主要給大家介紹了關(guān)于如何用python將文件夾內(nèi)多個(gè)excel表格合并成總表的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • 詳解python-opencv 常用函數(shù)

    詳解python-opencv 常用函數(shù)

    這篇文章主要介紹了python-opencv 常用函數(shù),主要包括讀取圖像保存圖像和縮放圖像的相關(guān)知識(shí),需要的朋友可以參考下
    2022-08-08
  • 使用pytorch時(shí)所遇到的一些問題總結(jié)

    使用pytorch時(shí)所遇到的一些問題總結(jié)

    這篇文章主要介紹了使用pytorch時(shí)所遇到的一些問題總結(jié),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python?爬取微博熱搜頁面

    Python?爬取微博熱搜頁面

    這篇文章主要介紹了Python?爬取微博熱搜頁面,關(guān)于Python?爬蟲,爬取網(wǎng)頁等相關(guān)內(nèi)容一般可作為小練習(xí),下面文章Python?爬取微博熱搜頁面也如此,需要的小伙伴可以參考一下
    2022-01-01
  • Python使用Turtle圖形函數(shù)畫圖顏色填充實(shí)例

    Python使用Turtle圖形函數(shù)畫圖顏色填充實(shí)例

    這篇文章主要介紹了Python使用Turtle圖形函數(shù)畫圖顏色填充實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Pandas使用Merge與Join和Concat分別進(jìn)行合并數(shù)據(jù)效率對比分析

    Pandas使用Merge與Join和Concat分別進(jìn)行合并數(shù)據(jù)效率對比分析

    這篇文章主要給大家介紹了關(guān)于pandas中DataFrame數(shù)據(jù)合并連接(merge、join、concat)的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12

最新評(píng)論