python中,參數是以引用的形式傳遞給函數的。來看下面代碼:
def a(the_list):
print('Got', the_list)
the_list.append('treats')
print('Set to', the_list)
outer_list = ['Dogs', 'eats']
print('Before, outer_list = ', outer_list)
a(outer_list)
print('After, outer_list = ', outer_list)
# Outputs in terminal
# >>> Before, outer_list = ['Dogs', 'eats']
# >>> Got ['Dogs', 'eats']
# >>> Set to ['Dogs', 'eats', 'treats']
# >>> After, outer_list = ['Dogs', 'eats', 'treats']
在上面代碼中the_list作爲參數傳遞進入a函數中,a函數對the_list進行操作,由於the_list是outer_list的引用,所以改變的是outer_list的數值。
好了,來看下進階版:
def b(the_list):
print('Got', the_list)
the_list = ['You', 'never', 'lie']
print('Set to', the_list)
outer_list = ['Dogs', 'eats']
print('Before, outer_list = ', outer_list)
a(outer_list)
print('After, outer_list = ', outer_list)
# Outputs in terminal
# >>> Before, outer_list = ['Dogs', 'eats']
# >>> Got ['Dogs', 'eats']
# >>> Set to ['You', 'never', 'lie']
# >>> After, outer_list = ['Dogs', 'eats']
上面代碼中一開始the_list還是outer_list的引用,但是由於the_list = ['You', 'never', 'lie']這句語句等號右邊是直接生成一個新的列表,所以the_list不在時outer_list的引用,而是變成了一個新的參數。對the_list操作,並不會改變outer_list的值。