在Python中,傳值方式分為傳遞可變對象和不可變對象兩種方式,需要注意的是這與C++中的傳值和傳引用并不一樣。
不可變對象包括數字、字符串、元組等類型,傳遞時,相當于復制了一份該對象,傳遞到函數中,函數對該值的修改并不會影響調用方的變量值。
def change_number(num): num += 1 a = 10 print(a) # 輸出 10 change_number(a) print(a) # 輸出 10
不可變對象的傳遞,實際上是對一份值的復制,使得傳遞過來的值和原來的值完全獨立,不會產生影響。
而可變對象包括列表、字典等類型,傳遞時則相當于傳遞的是一個地址,函數對該地址所指的值進行修改會直接影響調用方的變量值。
def change_list(lst): lst.append('new item') a = ['item1'] print(a) # 輸出 ['item1'] change_list(a) print(a) # 輸出 ['item1', 'new item']
可變對象的傳遞,實際上是對一個地址的傳遞,使得傳遞過來的地址指向的值和原來的值是同一份,修改這個值時也會影響原來的值。