python引用传参
介绍:
在python中的函数参数的传递,都是采用的==引用传递==,而不是(值传递,C默认是用值传递,除非使用指针)。
但是在python中的变量有两种类型:
- 可变类型(列表,字典)
- 不可变类型(数字,字符,元组)
因此,虽然是采用引用传递,但是对于两种不同类型的参数,显示出来的效果是不一样的。
对于可变类型,函数是==可以修改==原始对象的。
对于不可变类型,函数==无法修改==原始对象。
案例:
>>> def test(arg):
... if isinstance(arg, str): # 参数为字符或字符串
... arg = 'hahaha'
... elif isinstance(arg, int) or isinstance(arg, float): # 参数为数字
... arg = 0
... elif isinstance(arg, list): # 参数为列表
... arg[0] = 'hahahaha'
... elif isinstance(arg, dict): # 参数为字典
... arg['hahaha'] = 'hahaha'
... elif isinstance(arg, tuple): # 参数为元组
... print arg
>>>
>>> test_str = 'test_str' # 测试字符或字符串的情况
>>> test(test_str)
>>> print test_str # 原始值没有变
test_str
>>>
>>>
>>>
>>> test_int_or_float = 12.3 # 测试数字的情况
>>> test(test_int_or_float)
>>> print test_int_or_float # 原始值没有变
12.3
>>>
>>>
>>>
>>> test_tuple = ('123', 123) # 测试元组的情况
>>> test(test_tuple) # 由于元组本身无法修改,所以在函数内也没有对其做修改
('123', 123)
>>>
>>>
>>>
>>> test_list = [1, 2, 3] # 测试列表的情况
>>> test(test_list)
>>> print test_list # 原始值变化
['hahahaha', 2, 3]
>>>
>>>
>>>
>>> test_dict = {} # 测试字典的情况
>>> test(test_dict)
>>> print test_dict # 原始值变化
{'hahaha': 'hahaha'}