python中的可變物件和不可變物件

2021-09-20 16:43:18 字數 1266 閱讀 8538

知識點:python中,萬物皆物件。

知識點:python中,萬物皆物件。

python中不存在所謂的傳值呼叫,一切傳遞的都是物件的引用,也可以認為是傳址。

python在heap中分配的物件分成兩類:可變物件和不可變物件。所謂可變物件是指,物件的內容可變,而不可變物件是指物件內容不可變。

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

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

不可變型別特點:

看下面的例子(例1)

從上圖可知,不可變物件的特徵沒有變,變的只是建立了新物件,改變了變數的物件引用。

看乙個例子(例2)

>>>x = 1

>>>y = 1

>>>x = 1

>>> x is y

true>>>y is z

true

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

總結一下,不可變物件的優缺點。

優點是,這樣可以減少重複的值對記憶體空間的占用

缺點呢,如例1所示,我要修改這個變數繫結的值,如果記憶體中沒用存在該值的記憶體塊,那麼必須重新開闢一塊記憶體,把新位址與變數名繫結。而不是修改變數原來指向的記憶體塊的值,這回給執行效率帶來一定的降低。

下面看乙個可變物件的例子(例3)

python函式引數對於可變物件,函式內對引數的改變會影響到原始物件;對於不可變物件,函式內對引數的改變不會影響到原始引數。原因在於:

1、可變物件,引數改變的是可變物件,其內容可以被修改。

2、不可變物件,改變的是函式內變數的指向物件。

Python中的可變物件和不可變物件

python中,數值型別 int和float 字串str 元組tuple都是不可變型別。而列表list 字典dict 集合set是可變型別。還是看 比較直觀。先看不可變物件 先說明一點is就是判斷兩個物件的id是否相同,而 判斷的則是內容是否相同。a 2b 2c a 0 c 0 print id a...

python中的可變物件和不可變物件概念及例項

不可變型別 數字 字串 元組 不可變集合 可變型別 列表 字典 可變集合 物件所指向的記憶體中的值不能被改變,當改變這個變數的時候,原來指向的記憶體中的值不變,變數不再指向原來的值,而是開闢一塊新的記憶體,變數指向新的記憶體。可以說成 變數對應的值中的資料是不能被修改,如果修改就會生成乙個新的值從而...

Python中可變物件和不可變物件的區別

首先要分清幾個概念,什麼是物件?什麼是抽象?什麼是容器?物件有什麼特徵?根據python文件總結如下 文件 python語言參考 3.資料模型 抽象 從具體事物抽出 概括出它們共同的方面 本質屬性與關係等,而將個別的 非本質的方面 屬性與關係捨棄的思維過程 物件是 python 中對資料的抽象,py...