国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

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

2020-02-16 00:37:06
字體:
來源:轉載
供稿:網友

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

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

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

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

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

不可變類型特點:

看下面的例子(例1)

i = 73 i += 2 

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

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

看一個例子(例2)   

>>>x = 1>>>y = 1>>>z = 1>>> x is yTrue>>>y is zTrue

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

總結一下,不可變對象的優缺點。

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

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

下面看一個可變對象的例子(例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]

這里連續三次以缺省值,運行函數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__',            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 和顺县| 宕昌县| 晴隆县| 朝阳县| 旬阳县| 格尔木市| 汶上县| 固阳县| 师宗县| 丹阳市| 肇庆市| 沐川县| 娱乐| 报价| 涪陵区| 卢氏县| 突泉县| 塘沽区| 无棣县| 抚州市| 鄂伦春自治旗| 阳信县| 保山市| 收藏| 上杭县| 奇台县| 台前县| 安宁市| 盐津县| 九龙坡区| 灵川县| 临武县| 土默特左旗| 石阡县| 海盐县| 奉新县| 玛曲县| 介休市| 隆林| 龙泉市| 孟州市|