参数传递

Python 唯一支持的参数传递模式是共享传参(call by sharing)。

共享传参指函数的各个形式参数获得实参中各个引用的副本。也就是说,函数内部的形参是实参的别名。

1)不可变参数“通过值”进行传递
像整数和字符串这样的对象是不可变对象,它们通过对象引用而不是拷贝进行传递的,但是因为无论如何都不可能在原处改变不可变对象,实际的效果就很像创建了一份拷贝

2)可变对象是通过“指针”进行传递的
列表和字典这样的对象也是通过对象引用进行传递的,这一点与C语言使用指针传递数组很相似,可变对象能够在函数内部进行原处的改变,这一点和C数组很像

>>> def f(a, b): 
...     a += b 
...     return a 
... 
>>> x = 1 
>>> y = 2 
>>> f(x, y) 
3 
>>> x, y  ➊ 
(1, 2) 
>>> a = [1, 2] 
>>> b = [3, 4] 
>>> f(a, b) 
[1, 2, 3, 4] 
>>> a, b  ➋ 
([1, 2, 3, 4], [3, 4]) 
>>> t = (10, 20) 
>>> u = (30, 40) 
>>> f(t, u) 
(10, 20, 30, 40) 
>>> t, u ➌ 
((10, 20), (30, 40))

❶ 数字 x 没变

❷ 列表 a 变了

❸ 元组 t 没变

因为❶,❸是不可变类型, ❷是可变类型。

posted @ 2019-10-04 16:07  tianqibucuo  阅读(126)  评论(0)    收藏  举报