Python的函數參數傳遞
舉例:
1
a = 1
def index(a)
a = 2
index(a)
print a # 1
2
a = []
def index(a)
a.append(1)
index(a)
print a # [1]
通過上面兩個例子,可以的發現:
所有的變量都可以理解爲內存中一個對象的‘引用’
通過id來看引用a的內存地址可以比較理解
a = 1
def index(a)
print 'id1:', id(a) # id1: 43211876
a = 2
print 'id2:', id(a) # id2: 43211881
print 'id3:', id(2) # id3: 43211881
print 'id4:', id(a) #id4:43211876
print 'id5:', id(a) #id5:43211876
index(a)
print a # 1
可以發現在執行完 a = 2 的時候,a 引用中保存的值即內存地址發生了變化,由原來的1對象所在的地址變成了2實體對象的內存地址
而第二個例子a 引用保存的內存值就不會發生變化
a = []
def index(a)
print 'id1:', id(a) # id1: 53261788
a.append(1)
print 'id2:', id(a) # id2: 53261788
index(a)
print a # [1]
這裏的類型都是對象,而不是變量!
而在python中,
string,tuple和number都是不可變對象,
list,dict,set等是可變對象
當一個引用傳遞給函數的時候,函數自動複製一份引用,這個函數內部的引用和外部的引用並沒有關係。所以例1中的函數引用指向了一個不可變對象,當函數返回的時候,並不能使用函數外部的引用。而例2中函數內部的引用指向一個可變對象,可以對內存進行修改。
手打,見諒