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

Python中可變變量與不可變變量詳解

 更新時(shí)間:2021年10月11日 11:03:44   作者:ZhekaiLiu  
這篇文章主要介紹了Python中可變變量與不可變變量,但Python中沒(méi)有指針和引用的概念,導(dǎo)致很多時(shí)候參數(shù)的傳遞和調(diào)用的時(shí)候會(huì)產(chǎn)生疑問(wèn):我到底是復(fù)制了一份新的做操作還是在它指向的內(nèi)存操作?下面我們就帶著疑問(wèn)去閱讀下面文章內(nèi)容吧

前言:

C++不同于Python的顯著特點(diǎn),就是有指針和引用,這讓我們?cè)谡{(diào)用參數(shù)的時(shí)候更加清晰明朗。但Python中沒(méi)有指針和引用的概念,導(dǎo)致很多時(shí)候參數(shù)的傳遞和調(diào)用的時(shí)候會(huì)產(chǎn)生疑問(wèn):我到底是復(fù)制了一份新的做操作還是在它指向的內(nèi)存操作?

這個(gè)問(wèn)題根本上和可變、不可變變量有關(guān),我想把這個(gè)二者的區(qū)別和聯(lián)系做一個(gè)總結(jié),以更深入地理解Python內(nèi)部的操作。我本身非科班出身,如有不當(dāng)之處敬請(qǐng)批評(píng)指正。

一 、常見(jiàn)的變量分類

1、變量的創(chuàng)建

在了解可變、不可變變量的基本定義之前,我們需要明白變量是如何被創(chuàng)建的。

x = 1


python解釋器會(huì)判斷1在內(nèi)存中是否存在,若不存在,python會(huì)分配內(nèi)存,在內(nèi)存中創(chuàng)建數(shù)字1,然后看變量x是否存在,若不存在就創(chuàng)建x,最后把1賦值給x。

y = 1


當(dāng)繼續(xù)輸入上行代碼時(shí),1已經(jīng)在內(nèi)存中被創(chuàng)建了,現(xiàn)在是否需要重新創(chuàng)建一個(gè)1,然后賦值給y呢?還是直接將剛才就創(chuàng)建好的1賦值給y呢?答案是后者。我們可以通過(guò)id或者is來(lái)判斷是否在內(nèi)存中是同一個(gè)地址。

print(id(x) == id(y))
# or 
print(x is y)


但當(dāng)我們換成一個(gè)列表來(lái)嘗試呢?

a = [1,2,3]
b = [1,2,3]
print(id(a) == id(b))


答案卻和上面的結(jié)果相反,也就是說(shuō)內(nèi)存中即使有了x的[1,2,3],python中要?jiǎng)?chuàng)建把[1,2,3]賦給y的時(shí)候并沒(méi)有把x指向的那個(gè)賦過(guò)去,而是重新在內(nèi)存中開(kāi)辟了一塊新的空間,創(chuàng)建了一個(gè)新的[1,2,3]!這就引出了可變和不可變變量。

字面意思
按照我的個(gè)人理解,可變變量(mutable variable)就是內(nèi)存中內(nèi)容可以被修改的變量,而不可變變量(immutable variable)就是內(nèi)存中內(nèi)容不可以被修改的變量。

聽(tīng)起來(lái)比較抽象。我們可以把變量名理解為一個(gè)指針或者引用,他們都指向了內(nèi)存中的一塊空間。比如上節(jié)中x和y同時(shí)指向了1的那塊空間,a指向了[1,2,3]的那部分。那么如何理解內(nèi)存中的內(nèi)容可以被修改呢?對(duì)于一個(gè)int型的變量,我創(chuàng)建了1,那么這之后*任何在這個(gè)作用域中所有被賦為1 的變量都會(huì)指向它,而外部沒(méi)有方法來(lái)把這個(gè)內(nèi)存中的內(nèi)容改成2或者其他值*。而對(duì)于列表來(lái)說(shuō),那塊[1,2,3]我隨時(shí)可以把他改為[1,2,3,4],這就是內(nèi)存中內(nèi)容可以被修改。

二、變量分類

所有的變量都可以按可變、不可變變量來(lái)分類,那么我將常用的一些變量類型進(jìn)行分類。

1、、常見(jiàn)的不可變變量

  • 整型
  • 浮點(diǎn)型
  • 布爾型
  • 復(fù)數(shù)
  • 字符串
  • 元組

2、常見(jiàn)的可變變量

  • 列表
  • 集合
  • 字典
  • 其他迭代器

三、拷貝的差別

copydeepcopy都表示拷貝,那么二者的區(qū)別就在于可變、不可變對(duì)象。copydeepcopy對(duì)于不可變對(duì)象來(lái)說(shuō)是沒(méi)有區(qū)別的,都是把指向內(nèi)存已有的空間的引用進(jìn)行拷貝;但對(duì)于可變對(duì)象,copy是拷貝指向內(nèi)存已有空間的引用,而deepcopy才是新開(kāi)辟一塊空間,將原來(lái)的內(nèi)容完全拷貝,然后返回新的空間的引用。

四、參數(shù)傳遞的差別

參數(shù)傳遞的過(guò)程也是很容易出現(xiàn)疑惑的過(guò)程。C++中的參數(shù)傳遞很明確,引用就是引用,形參就是形參,但Python中不是,因?yàn)?code>python中沒(méi)有明確的指針、引用。

對(duì)不可變變量,傳遞進(jìn)函數(shù)后由于作用域改變,函數(shù)內(nèi)部有新的空間,因此會(huì)產(chǎn)生形參,將原來(lái)的不可變變量進(jìn)行復(fù)制,然后在函數(shù)內(nèi)部進(jìn)行后續(xù)操作。

對(duì)可變變量,本身內(nèi)容就可以被修改,那么在函數(shù)內(nèi)部也允許修改本身,因此傳遞進(jìn)函數(shù)的是該內(nèi)存空間的引用,對(duì)該參數(shù)操作,相應(yīng)的在主函數(shù)也會(huì)被修改。

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

相關(guān)文章

  • 最強(qiáng)Python可視化繪圖庫(kù)Plotly詳解用法

    最強(qiáng)Python可視化繪圖庫(kù)Plotly詳解用法

    數(shù)據(jù)分析離不開(kāi)數(shù)據(jù)可視化。Plotly 是一款用來(lái)做數(shù)據(jù)分析和可視化的在線平臺(tái),功能非常強(qiáng)大,可以在線繪制很多圖形比如條形圖、散點(diǎn)圖、餅圖、直方圖等等
    2021-11-11
  • python scipy求解非線性方程的方法(fsolve/root)

    python scipy求解非線性方程的方法(fsolve/root)

    今天小編就為大家分享一篇python scipy求解非線性方程的方法(fsolve/root),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • python3.x讀寫文件及BOM處理詳解

    python3.x讀寫文件及BOM處理詳解

    這篇文章主要為大家詳細(xì)介紹了python3.x讀寫文件及BOM處理的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01
  • Python設(shè)計(jì)模式中的創(chuàng)建型工廠模式

    Python設(shè)計(jì)模式中的創(chuàng)建型工廠模式

    這篇文章主要介紹了Python設(shè)計(jì)模式中的創(chuàng)建型工廠模式,工廠模式即Factory?Pattern,是提供創(chuàng)建對(duì)象的最佳方式,下文小編介紹Python工廠模式的相關(guān)資料,需要的朋友可以參考一下
    2022-02-02
  • Python數(shù)據(jù)處理利器Pandas?DataFrame常用操作

    Python數(shù)據(jù)處理利器Pandas?DataFrame常用操作

    這篇文章主要為大家介紹了Python數(shù)據(jù)處理利器Pandas?DataFrame,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Python中自定義函方法與參數(shù)具有默認(rèn)值的函數(shù)

    Python中自定義函方法與參數(shù)具有默認(rèn)值的函數(shù)

    這篇文章主要介紹了Python中自定義函方法與參數(shù)具有默認(rèn)值的函數(shù),在Python編程中,可以使用已經(jīng)定義好的函數(shù),也可以自定義函數(shù)實(shí)現(xiàn)某些特殊的功能,更多相關(guān)資料,請(qǐng)需要的人參考下面文章內(nèi)容
    2022-02-02
  • Python測(cè)試函數(shù)出現(xiàn)AssertionError:None?!=?‘Janis?Joplin‘問(wèn)題及解決

    Python測(cè)試函數(shù)出現(xiàn)AssertionError:None?!=?‘Janis?Joplin‘問(wèn)題及解決

    這篇文章主要介紹了Python測(cè)試函數(shù)出現(xiàn)AssertionError:None?!=?‘Janis?Joplin‘問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python使用Plotly繪制常見(jiàn)5種動(dòng)態(tài)交互式圖表

    Python使用Plotly繪制常見(jiàn)5種動(dòng)態(tài)交互式圖表

    Plotly是一個(gè)非常強(qiáng)大的開(kāi)源數(shù)據(jù)可視化框架,它通過(guò)構(gòu)建基于 HTML 的交互式圖表來(lái)顯示信息,可創(chuàng)建各種形式的精美圖表。本文將用Plotly庫(kù)繪制常見(jiàn)的五種動(dòng)態(tài)交互式圖表,感興趣的可以學(xué)習(xí)一下
    2022-03-03
  • Python創(chuàng)建一個(gè)自定義視頻播放器的實(shí)現(xiàn)

    Python創(chuàng)建一個(gè)自定義視頻播放器的實(shí)現(xiàn)

    本文主要介紹了Python創(chuàng)建一個(gè)自定義視頻播放器的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • Python中的默認(rèn)參數(shù)實(shí)例分析

    Python中的默認(rèn)參數(shù)實(shí)例分析

    這篇文章主要介紹了Python中的默認(rèn)參數(shù)實(shí)例分析,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01

最新評(píng)論

陇川县| 五台县| 白水县| 怀安县| 明光市| 桐城市| 竹溪县| 许昌市| 西充县| 馆陶县| 临海市| 东阳市| 庆安县| 阿拉善右旗| 呼图壁县| 康马县| 张家口市| 耿马| 长沙市| 汤原县| 陇南市| 平武县| 突泉县| 玉林市| 伽师县| 河池市| 巴林左旗| 类乌齐县| 长泰县| 玉林市| 澜沧| 巴青县| 阜宁县| 襄樊市| 南宁市| 甘德县| 潜山县| 南城县| 恩平市| 镇巴县| 丘北县|