首先要分清幾個概念,什麼是物件?什麼是抽象?什麼是容器?物件有什麼特徵?
根據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中的變數存放的是物件引用,所以對於不可變物件而言,儘管物件本身不可變,但變數的物件引用是可變的。從上面得知,不...