1. 程式人生 > >淺析python中的可變型別和不可變型別

淺析python中的可變型別和不可變型別

資料型別

  • 可變型別物件:列表(list),字典(dict)
  • 不可變型別物件:數字(int,bool,float、、、),字串(string),元組(tuple)

意義

可變與不可變指的是,在對物件本身進行操作時,引用所指向的地址裡的內容是否發生變化。
比如在函式中區域性變數本身發生變化,同名的全域性變數是否發生變化。

舉例

  1. 可變型別-列表 先看個例項
>>> L = [1,a,"n"]
>>> L
[1, 2, 'n']
>>> id(L)
1858646885064
>>> L += L
>>> L
[1, 2, 'n', 1, 2, 'n']
>>> id(L)
1858646885064

當列表本身發生變化時,id()未發生變化。

  1. 不可變型別-字串
>>> str_1 = "asdf"
>>> str_1
'asdf'
>>> id(str_1)
1858646709840
>>> str_1 += str_1
>>> str_1
'asdfasdf'
>>> id(str_1)
1858646817712

當字串發生變化時,id()也會發生變化

使用注意

在呼叫函式時,函式內部的區域性變數名和全域性變數名一致時,要注意可變型別變數的值的變化。

a = [1, 2, 3]


def test(num):
    num += num
    print(num)


test(a)
print(a)

執行結果:

[1, 2, 3, 1, 2, 3] [1, 2, 3, 1, 2, 3]

a = [1, 2, 3]


def test(num):
    num = num + num
    print(num)


test(a)
print(a)

執行結果:

[1, 2, 3, 1, 2, 3] [1, 2, 3]

這裡再說一下“num += num”這個運算,其運算結果和“num = num +num”是一樣的,但是“+=”這個操作類似於.append等,是對物件本身的一種操作,而“=”這樣的操作,是類似於重新賦值的操作。