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

python變量賦值方法(可變與不可變)

 更新時間:2019年01月12日 15:46:56   作者:魔亦有道  
今天小編就為大家分享一篇python變量賦值方法(可變與不可變),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

python中不存在所謂的傳值調用,一切傳遞的都是對象的引用,也可以認為是傳址。

一、可變對象和不可變對象

Python在heap中分配的對象分成兩類:可變對象和不可變對象。所謂可變對象是指,對象的內容可變,而不可變對象是指對象內容不可變。

不可變(immutable):int、字符串(string)、float、(數值型number)、元組(tuple)

可變(mutable):字典型(dictionary)、列表型(list)

不可變類型特點:

看下面的例子(例1)

i = 73 
i += 2 

python變量賦值(可變與不可變)

從上圖可知,不可變對象的特征沒有變,變的只是創(chuàng)建了新對象,改變了變量的對象引用。

看一個例子(例2)   

>>>x = 1
>>>y = 1
>>>z = 1
>>> x is y
True
>>>y is z
True

如上所示,因為整數為不可變,x,y,z在內存中均指向一個值為1的內存地址,也就是說,x,y,z均指向的是同一個地址,值得注意的是,整形來說,目前僅支持(-1,100)。

總結一下,不可變對象的優(yōu)缺點。

優(yōu)點是,這樣可以減少重復的值對內存空間的占用。

缺點呢,如例1所示,我要修改這個變量綁定的值,如果內存中沒用存在該值的內存塊,那么必須重新開辟一塊內存,把新地址與變量名綁定。而不是修改變量原來指向的內存塊的值,這回給執(zhí)行效率帶來一定的降低。

下面看一個可變對象的例子(例3)   

m=[5,9]
m+=[6]

python變量賦值(可變與不可變)

二、函數參數:

Python函數參數對于可變對象,函數內對參數的改變會影響到原始對象;對于不可變對象,函數內對參數的改變不會影響到原始參數。原因在于:

1、可變對象,參數改變的是可變對象,其內容可以被修改。

2、不可變對象,改變的是函數內變量的指向對象。

比如存在2個列表 a 和 b

如果a=b的話, a和b的地址是相同的;如果只是想拷貝,那么就得用 a=b[:]

def mutable(b = []): #函數使用了缺省變量
  b.append(0)
  return b
>>>mutable()
[0]
>>>mutable()
[0,0]
>>>mutable()
[0,0,0]

這里連續(xù)三次以缺省值,運行函數3此,每次的結果都不一樣,按我們的想想,三次的結果,應該是一樣的,都為[0],但是…

那么原因是什么呢,前面說過,一切皆為對象,函數mutable也為一個對象,使用dir()查看函數的屬性:

dir(mutable)

['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__',

上面我們三次運行了mutable這個函數,如果用mutable.__defaults__來查看函數對象的默認參數變化的話,就會發(fā)現問題了。

>>>mutable.__defaults__
([],)
>>>mutable()
[0]
>>>mutable.__defaults__
([0],)
>>>mutable()
[0,0]
>>>mutable.__defaults__
([0,0],)

仔細觀察,類對象內部屬性dict中'x'對應的值,在每創(chuàng)建一個對象時都發(fā)生了變化。也就是說,在每次創(chuàng)建類對象時,變量x引用內存的初始值是不同的,這終要歸因于列表(list)的可變性導致的。每次創(chuàng)建對象時,因為列表的可變性,函數對象b的dict屬性中,x鍵對應的值,被改變,而不是重新創(chuàng)建,所以出現了上面的結果。

綜上:初學者如果不充分理解python的變量和類型和參數傳遞方式,或者是一切解釋對象的原理,會很容易產生上面的錯誤。

以上這篇python變量賦值方法(可變與不可變)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Python word文本自動化操作實現方法解析

    Python word文本自動化操作實現方法解析

    這篇文章主要介紹了Python word文本自動化操作實現方法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • 10 個Python中Pip的使用技巧分享

    10 個Python中Pip的使用技巧分享

    眾所周知,pip 可以安裝、更新、卸載 Python 的第三方庫,非常方便。本文小編為大家總結了Python中Pip的使用技巧,需要的可以參考一下
    2022-07-07
  • Python調用graphviz繪制結構化圖形網絡示例

    Python調用graphviz繪制結構化圖形網絡示例

    今天小編就為大家分享一篇Python調用graphviz繪制結構化圖形網絡示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python從wsgi導入失敗的問題解決方法

    Python從wsgi導入失敗的問題解決方法

    本文主要介紹了Python從wsgi導入失敗的問題解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-04-04
  • Python九九乘法表的七種實現方式詳解

    Python九九乘法表的七種實現方式詳解

    在Python中,輸出九九乘法表是一道非?;A的題目,但對于初學者來說,也是一個很好的練習和鞏固基礎知識的機會,這篇文章主要給大家介紹了關于Python九九乘法表的七種實現方式,需要的朋友可以參考下
    2023-09-09
  • 利用插件和python實現Excel轉json的兩種辦法

    利用插件和python實現Excel轉json的兩種辦法

    轉換Excel表格到JSON格式有很多方法,下面這篇文章主要給大家介紹了關于利用插件和python實現Excel轉json的兩種辦法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • python的三種等待方式及優(yōu)缺點小結

    python的三種等待方式及優(yōu)缺點小結

    這篇文章主要介紹了python的三種等待方式及優(yōu)缺點的相關資料,三種等待元素加載的方法分別是強制等待、隱式等待和顯式等待,并詳細比較了它們的優(yōu)缺點,需要的朋友可以參考下
    2024-12-12
  • Python中添加搜索路徑的方法實例

    Python中添加搜索路徑的方法實例

    我們平時在用python寫一些腳本作為工具時,經常需要在其他腳本中加載該工具,這篇文章主要給大家介紹了關于Python中添加搜索路徑的相關資料,需要的朋友可以參考下
    2022-05-05
  • Python?Pyperclip模塊安裝和使用詳解

    Python?Pyperclip模塊安裝和使用詳解

    Pyperclip模塊兼容python2和python3,能跨平臺使用,這篇文章主要介紹了Pyperclip模塊安裝和使用詳解,需要的朋友可以參考下
    2023-03-03
  • python多進程下實現日志記錄按時間分割

    python多進程下實現日志記錄按時間分割

    這篇文章主要為大家詳細介紹了python多進程下實現日志記錄按時間分割,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07

最新評論

罗定市| 深泽县| 高雄市| 千阳县| 孝感市| 同仁县| 新营市| 泽普县| 东乌珠穆沁旗| 韶山市| 铜川市| 枣强县| 博野县| 大埔区| 富源县| 从化市| 全南县| 积石山| 子洲县| 铁岭县| 塘沽区| 石棉县| 文成县| 湘西| 江北区| 康定县| 公主岭市| 桐庐县| 金昌市| 桓台县| 上虞市| 金堂县| 浮山县| 建阳市| 贡嘎县| 永康市| 长沙县| 泰安市| 西和县| 安乡县| 兰坪|