參數(自變量)在Python里都是按引用傳遞,也就是傳遞的是變量地址,(變量就是地址,沒有類型,而關聯的對象是有類型的)
但是對於不可變變量,在函數內修改會申請新的內存空間,所以對外層函數沒有影響,
對於list變量,相當於操作同一塊內存,則會影響外層函數。
- 可變對象:list dict set
- 不可變對象:tuple string int float bool
- #!/usr/bin/python
- # 可寫函數說明
- def changeme( mylist ):
- "修改傳入的列表"
- mylist.append([1,2,3,4]);
- print "函數內取值: ", mylist
- return
- # 調用changeme函數
- mylist = [10,20,30];
- changeme( mylist );
- print "函數外取值: ", mylist
傳入函數的和在末尾添加新內容的對象用的是同一個引用。故輸出結果如下:
- 函數內取值: [10, 20, 30, [1, 2, 3, 4]]
- 函數外取值: [10, 20, 30, [1, 2, 3, 4]]
好,看到這里,自己親手測試一下,代碼:
- def printme(age,str):
- str = 'str changed!'
- age=25
- print age,str
- return
- str = 'ori str'
- age = 23
- printme(age,str)
- print age,str
輸出結果:
- 25 str changed!
- 23 ori str