1. 程式人生 > >python筆記-可變物件與不可變物件

python筆記-可變物件與不可變物件

        python中,萬物皆物件。所有的物件可以分為可變物件不可變物件兩類。當變數引用不可變物件時,使用該變數的任何操作,都會建立新物件,而不會改變引用的物件。與此相反,變數引用可變物件時,或者可能建立新的物件,或者改變被引用的物件本身,這取決於進行的何種操作。

       1.可變物件與不可變物件

        可變物件是指物件的內容可變,包括字典(dictionary)、列表(list)

        不可變物件是

指對象的內容不可變,包括int、字串(string)、浮點型(float)、數值型(number)、元組(tuple)

         2.對不可變物件的操作

         這裡舉一個簡單的例子。

>>>myInt = 27
>>>yourInt = myInt
>>>yourInt
27
>>>yourInt = yourInt + 5
>>>myInt
27
>>>yourInt
32
          當宣告  myInt = 27 和  yourInt = myInt 後,myInt 和 yourInt 指向了同一個物件27。當執行  yourInt = yourInt +5後,由於int型別為不可變物件,yourInt會指向一個新的物件32。

       3.對可變物件的操作

>>>list1 = [1,2,3]
>>>list1
[1,2,3]
>>>list2 = list1
>>>list2
[1,2,3]
>>>list1 is list2
True
>>>list1.append(27)
>>>list1
[1,2,3,27]
>>>list2
[1,2,3,27]
          對list1做的改變也影響了list2!這是因為list1和list2都引用了同一個物件。由於是可變物件,除非你要求,否則Python不會儲存副本,他會通過重用儲存已存在的物件來節省空間。

         說到這裡,可能有的小夥伴想問,如果想複製列表,而不是引用同一個物件該怎麼辦,這時候可以改用分片[:]的方法,如下所示:

>>>list1 = [1,2,3]
>>>list1
[1,2,3]
>>>list2 = list1[:]
>>>list1 is list2
False
>>>list2
[1,2,3]
>>>list1.append(27)
>>>list1
[1,2,3,27]
>>>list2
[1,2,3]
        4.總結

       在 python中,當變數引用不可變物件時,使用該變數的任何操作(連線、替換、去除等),都會建立新物件,而不會改變引用的物件。與此相反,變數引用可變物件時,或者可能建立新的物件,或者改變被引用的物件本身,這取決於進行的何種操作。例如,L = [1,2,3],L=  L + [9]和L.append(9)得到的結果都是列表[1,2,3,9]。然而,前者建立了一個新物件,後者卻沒有。