變量和對象
在Python中,一個變量可以說是內存中的一個對象的“標籤”或“引用”。
比如a = 1
:
現在變量a指向了內存中的一個int型的對象(a相當於對象的標籤)。如果給a重新賦值,那麼標籤a將會移動並指向另一個對象,如下圖所示a = 2
:
原來的值爲1的int型對象仍然存在,但我們不能再通過a這個標識符去訪問它了(當一個對象沒有任何標籤或引用指向它時,它就會被自動釋放)。如果我們把變量a賦值給另外一個變量b,我們只是給當前內存中對象增加一個“標籤”而已b = a
:
所以在Python中變量只是一個標籤或者標識符,它指向內存中的對象。故變量並沒有類型,類型是屬於對象的,這也是Python中的變量可以被任何類型賦值的原因。
可變對象和不可變對象
不可變對象:numbers,strings和tuples是不可變對象。
可變對象:list,dict是可變對象。
函數傳參
在Python中參數傳遞時,對於不可變的對象,是傳值方式;對於可變對象,是傳地址的方式。
接下來我們看兩個例子:
def foo(arg):
arg = 6
print(arg)
x = 8
foo(x) # 輸出6
print(x) # 輸出8
def foo(arg):
arg.append(6)
x = [8, 2]
print(x) # 輸出[8, 2]
foo(x)
print(x) # 輸出[8, 2, 6]