淺析python中的可變型別和不可變型別
阿新 • • 發佈:2018-12-15
資料型別
- 可變型別物件:列表(list),字典(dict)
- 不可變型別物件:數字(int,bool,float、、、),字串(string),元組(tuple)
意義
可變與不可變指的是,在對物件本身進行操作時,引用所指向的地址裡的內容是否發生變化。
比如在函式中區域性變數本身發生變化,同名的全域性變數是否發生變化。
舉例
- 可變型別-列表 先看個例項
>>> L = [1,a,"n"] >>> L [1, 2, 'n'] >>> id(L) 1858646885064 >>> L += L >>> L [1, 2, 'n', 1, 2, 'n'] >>> id(L) 1858646885064
當列表本身發生變化時,id()未發生變化。
- 不可變型別-字串
>>> 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等,是對物件本身的一種操作,而“=”這樣的操作,是類似於重新賦值的操作。