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

2022-09-12 05:03:12 字數 1644 閱讀 7589

首先要分清幾個概念,什麼是物件?什麼是抽象?什麼是容器?物件有什麼特徵?

根據python文件總結如下:文件》python語言參考》3.資料模型

① 抽象:從具體事物抽出、概括出它們共同的方面、本質屬性與關係等,而將個別的、非本質的方面、屬性與關係捨棄的思維過程

② 物件是 python 中對資料的抽象,python程式中的所有資料都是由物件或物件間關係來表示的

③ 容器:一些物件包含對其他物件的引用,這些物件稱為容器,如列表,元組,字典

④ 物件的三個特徵

識別符號 (identity):唯一不可更改,可理解為物件在記憶體中的位址,is操作符可比較兩個物件的 identity,id() 函式返回乙個物件的 identity

型別 (type):決定物件操作和取值,不可更改

值 (value):有些物件的值可以改變,值可以改變的物件被稱為可變的 (mutable),值不可以改變的物件就被稱為不可變的 (immutable)

① 數字,字串,元組為不可變,字典和列表可變

② 在這裡要注意對於容器而言可變和不可變有所不同,如果乙個不可變 tuple 容器包含對可變物件的引用,當可變物件值改變的時候 tuple 的值也會改變

但是 tuple 仍然是不可變的,因為包含的可變物件的 id 不變

下面會以 list 和 tuple 具體舉例分析

>>

>

list=[

'a',

'b']

>>

>id(

list

)# 列表唯一id

60968648l

>>

>id(

list[0

])# 包含物件id

59715296l

>>

>

list[0

]='c'>>

>

list

['c'

,'b'

]>>

>id(

list

)# 列表唯一id不變

60968648l

>>

>id(

list[0

])# 新物件被構造,即id改變

59711896l

>>

>

tuple=(

['a'

,'b'],

'c')

>>

>id(

tuple

)# 元組唯一id

61112904l

>>

>id(

tuple[0

])# 元組包含物件id

61114184l

>>

>

tuple[0

][1]

='z'

>>

>

tuple([

'z',

'b']

,'c'

)>>

>id(

tuple

)# 元組唯一id

61112904l

>>

>id(

tuple[0

])# 無新物件構造,包含的列表id不變,列表值改變

61114184l

python 可變物件和不可變物件

變數沒有型別,那麼就意味著它可以隨意指向任何物件。python中的變數相當於乙個指標。當將乙個變數a賦值給另乙個變數b時,無論變數a指向的是可變物件還是不可變物件,變數b指向變數a指向的物件。例 alist 1 2,3 anolist alist id alist id anolist true b...

Python可變物件和不可變物件

python中一切皆物件,每個物件都有其唯一的id,對應的型別和值,其中id指的是物件在記憶體中的位置。根據物件的值是否可修改分為可變物件和不可變物件。其中,不可物件包括 數字,字串,tuple,frozenset 不可變集合 可變物件包括 list,dict,set python中的變數可以指向任...

Python 可變物件和不可變物件

python在heap中分配的物件分成兩類 可變物件和不可變物件。所謂可變物件是指,物件的內容是可變的,例如list。而不可變的物件則相反,表示其內容不可變。一 不可變物件 由於python中的變數存放的是物件引用,所以對於不可變物件而言,儘管物件本身不可變,但變數的物件引用是可變的。從上面得知,不...