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

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

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

python中不存在所謂的傳值調(diào)用,一切傳遞的都是對(duì)象的引用,也可以認(rèn)為是傳址。

一、可變對(duì)象和不可變對(duì)象

Python在heap中分配的對(duì)象分成兩類:可變對(duì)象和不可變對(duì)象。所謂可變對(duì)象是指,對(duì)象的內(nèi)容可變,而不可變對(duì)象是指對(duì)象內(nèi)容不可變。

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

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

不可變類型特點(diǎn):

看下面的例子(例1)

i = 73 
i += 2 

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

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

看一個(gè)例子(例2)   

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

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

總結(jié)一下,不可變對(duì)象的優(yōu)缺點(diǎn)。

優(yōu)點(diǎn)是,這樣可以減少重復(fù)的值對(duì)內(nèi)存空間的占用。

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

下面看一個(gè)可變對(duì)象的例子(例3)   

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

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

二、函數(shù)參數(shù):

Python函數(shù)參數(shù)對(duì)于可變對(duì)象,函數(shù)內(nèi)對(duì)參數(shù)的改變會(huì)影響到原始對(duì)象;對(duì)于不可變對(duì)象,函數(shù)內(nèi)對(duì)參數(shù)的改變不會(huì)影響到原始參數(shù)。原因在于:

1、可變對(duì)象,參數(shù)改變的是可變對(duì)象,其內(nèi)容可以被修改。

2、不可變對(duì)象,改變的是函數(shù)內(nèi)變量的指向?qū)ο蟆?/p>

比如存在2個(gè)列表 a 和 b

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

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

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

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

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__',

上面我們?nèi)芜\(yùn)行了mutable這個(gè)函數(shù),如果用mutable.__defaults__來查看函數(shù)對(duì)象的默認(rèn)參數(shù)變化的話,就會(huì)發(fā)現(xiàn)問題了。

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

仔細(xì)觀察,類對(duì)象內(nèi)部屬性dict中'x'對(duì)應(yīng)的值,在每創(chuàng)建一個(gè)對(duì)象時(shí)都發(fā)生了變化。也就是說,在每次創(chuàng)建類對(duì)象時(shí),變量x引用內(nèi)存的初始值是不同的,這終要?dú)w因于列表(list)的可變性導(dǎo)致的。每次創(chuàng)建對(duì)象時(shí),因?yàn)榱斜淼目勺冃裕瘮?shù)對(duì)象b的dict屬性中,x鍵對(duì)應(yīng)的值,被改變,而不是重新創(chuàng)建,所以出現(xiàn)了上面的結(jié)果。

綜上:初學(xué)者如果不充分理解python的變量和類型和參數(shù)傳遞方式,或者是一切解釋對(duì)象的原理,會(huì)很容易產(chǎn)生上面的錯(cuò)誤。

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

相關(guān)文章

  • 如何搜索查找并解決Django相關(guān)的問題

    如何搜索查找并解決Django相關(guān)的問題

    每個(gè)程序員都會(huì)在開發(fā)過程中遇到這樣或那樣的問題, 有時(shí)光靠一個(gè)人是無法解決所有問題的, 所以我們應(yīng)該找到適當(dāng)?shù)牡胤教釂?
    2014-06-06
  • Python在Windows和在Linux下調(diào)用動(dòng)態(tài)鏈接庫(kù)的教程

    Python在Windows和在Linux下調(diào)用動(dòng)態(tài)鏈接庫(kù)的教程

    這篇文章主要介紹了Python在Windows和在Linux下調(diào)用動(dòng)態(tài)鏈接庫(kù)的教程,在進(jìn)行Python的CS端編程時(shí)經(jīng)常需要用到,需要的朋友可以參考下
    2015-08-08
  • Python使用LSTM實(shí)現(xiàn)銷售額預(yù)測(cè)詳解

    Python使用LSTM實(shí)現(xiàn)銷售額預(yù)測(cè)詳解

    大家經(jīng)常會(huì)遇到一些需要預(yù)測(cè)的場(chǎng)景,比如預(yù)測(cè)品牌銷售額,預(yù)測(cè)產(chǎn)品銷量。本文給大家分享一波使用?LSTM?進(jìn)行端到端時(shí)間序列預(yù)測(cè)的完整代碼和詳細(xì)解釋,需要的可以參考一下
    2022-07-07
  • pytorch 修改預(yù)訓(xùn)練model實(shí)例

    pytorch 修改預(yù)訓(xùn)練model實(shí)例

    今天小編就為大家分享一篇pytorch 修改預(yù)訓(xùn)練model實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • python中的3種定義類方法

    python中的3種定義類方法

    這篇文章主要給大家分享得是 python中的3種定義類方法,分別是普通方法、類方法(@classmethod)以及類方法(@classmethod),想了解方法具體實(shí)現(xiàn)的小伙伴可以參考下面文章內(nèi)容哦,希望對(duì)你有所幫助
    2021-11-11
  • Python文件讀寫處理日常任務(wù)終極工具實(shí)例

    Python文件讀寫處理日常任務(wù)終極工具實(shí)例

    Python文件的讀寫操作時(shí),有很多需要考慮的細(xì)節(jié),這包括文件打開方式、讀取和寫入數(shù)據(jù)的方法、異常處理等,在本文中,將深入探討Python中的文件操作,旨在提供全面的指南,幫你充分了解Python文件的讀寫
    2023-11-11
  • Python 通過分隔符分割文件后按特定次序重新組合的操作

    Python 通過分隔符分割文件后按特定次序重新組合的操作

    這篇文章主要介紹了Python 通過分隔符分割文件后按特定次序重新組合的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Python中的異常處理講解

    Python中的異常處理講解

    這篇文章介紹了Python中的異常處理,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • python mock測(cè)試的示例

    python mock測(cè)試的示例

    這篇文章主要介紹了python mock測(cè)試的示例,幫助大家利用python進(jìn)行模擬接口測(cè)試,感興趣的朋友可以了解下
    2020-10-10
  • Python學(xué)習(xí)之流程控制與條件判斷總結(jié)

    Python學(xué)習(xí)之流程控制與條件判斷總結(jié)

    這篇文章主要為大家介紹了Python中的流程控制與條件判斷,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下
    2022-03-03

最新評(píng)論