主要內容轉載自他人csdn博客
知識點:python中,萬物皆對象。python中不存在所謂的傳值調用,一切傳遞的都是對象的引用,也可以認為是傳址。
一、可變對象和不可變對象
Python在heap中分配的對象分成兩類:可變對象和不可變對象。所謂可變對象是指,對象的內容可變,而不可變對象是指對象內容不可變。
不可變(immutable):int、字符串(string)、float、(數值型number)、元組(tuple)
可變(mutable):字典型(dictionary)、列表型(list)
e.g:
>>> i=73
>>> a=i
>>> i+=2
>>> i
75
>>> a
73
20140902164438953.png
如圖所示,當i+=2時,不可變對象的特征沒有變,變的只是創建了新對象,改變了變量的對象引用。同理我們創建新的變量a指向i時,它也創建了自己的新對象,所以不受l的修改而修改
再舉一個可變對象的例子
e.g.:
>>> m=[5,9]
>>> a=m
>>> a
[5, 9]
>>> m.append(6)
>>> m
[5, 9, 6]
>>> a
[5, 9, 6]
20140902165215796.png
這里我們對list m做了修改,因為list為可變對象,所以它沒有創建新對象和改變對象引用,它只是修改了引用對象。同時我們讓一個新變量a指向m,因為m的引用對象發生了改變,所以a的引用對象也發生了改變。
這里注意區分兩種可變不可變
immutable and mutable指的是上面的講解,而有時候說list可變而tuple不可變指的是tuple一旦初始化就不能修改,它沒有像list一樣的append(),insert()這樣的方法。