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的值。