【一、Python传递的实参为列表的情况】

  1. 定义函数的时候,设置形参为一个列表(python中并不需要显示地定义类型);
  2. 传递实参的时候,可以传递一个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中的切片方法 [:] 创建的副本,但是复制列表会导致内存的开销,如果可以不用,处于性能考虑还是不要使用。


 

posted on 2018-03-06 23:23  飞飞fly  阅读(651)  评论(0)    收藏  举报