Python語言特性-python的函數參數傳遞

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中函數內部的引用指向一個可變對象,可以對內存進行修改。

手打,見諒

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章