【一、Python传递的实参为列表的情况】
- 定义函数的时候,设置形参为一个列表(python中并不需要显示地定义类型);
- 传递实参的时候,可以传递一个list的类型到函数,但是传递过去的list如果在函数中修改,那么这个list在外部也会被修改;
【传递的是list,list被修改】
1 def greet_usr(names): 2 """向用户发起问候""" 3 for name in names: 4 print('Hello' + name) 5 6 names[0] = 'Modify' 7 8 # 定义一个list,并传递到函数 9 person_name = ['Lucy', 'Lily', 'Jim'] 10 greet_usr(person_name) 11 12 # 打印这list 13 print(person_name)
得到的结果如下:
1 "C:\Program Files\Python35\python.exe" D:/Python/test.py 2 HelloLucy 3 HelloLily 4 HelloJim 5 ['Modify', 'Lily', 'Jim']
可以看出 list 在函数内修改,那么在外部也会被修改。
【二、传递的是list的副本,list不被修改】
只需要在调用函数,传递实参的时候,将list写成: function_name(list[:]) 即可传递list的副本。
def greet_usr(names): """向用户发起问候""" for name in names: print('Hello' + name) names[0] = 'Modify' # 定义一个list,并传递到函数 person_name = ['Lucy', 'Lily', 'Jim'] greet_usr(person_name[:]) # 打印这list print(person_name)
运行的结果如下:
"C:\Program Files\Python35\python.exe" D:/Python/test.py HelloLucy HelloLily HelloJim ['Lucy', 'Lily', 'Jim'] Process finished with exit code 0
【原理】
1.Python 传递的实参,默认是引用的方式;
2.Python中的切片方法 [:] 创建的副本,但是复制列表会导致内存的开销,如果可以不用,处于性能考虑还是不要使用。
浙公网安备 33010602011771号