Python 函数参数传递指针
在Python中,函数参数传递是按值传递的,也就是说函数接收的是参数的拷贝而非参数本身。但是对于可变对象(如列表、字典)来说,传递的是对象的指针,因此在函数内部对这些可变对象所做的修改会影响到原始对象。本文将详细介绍Python函数参数传递的原理及相关示例。
传递不可变对象
先来看一个简单的示例,传递一个整数参数:
运行结果为:
在上述示例中,函数change_number
中修改了num
的值,但是对原始的x
没有影响。这是因为在Python中整数属于不可变对象,函数传递进来的是5
的拷贝而不是x
本身。
传递可变对象
接下来看一个传递列表参数的示例:
运行结果为:
在上述示例中,函数change_list
对传入的列表my_list
进行了修改,由于列表是可变对象,所以修改会直接影响到原始的列表。
传递不可变对象的可变属性
在Python中,虽然不可变对象本身无法被修改,但是如果对象具有可变属性,那么这些可变属性是可以被修改的。比如元组中的列表:
运行结果为:
虽然元组是不可变对象,但是元组中的可变列表是可以被修改的,因此对可变属性的修改是会影响到原始对象的。
传递可变对象的拷贝
如果想要在函数内部修改可变对象而不影响到原始对象,可以传递对象的拷贝。以下是一个示例代码:
运行结果为:
在上述示例中,传递了列表的拷贝给函数change_list_copy
,因此函数对拷贝的修改不会影响到原始对象。
全局变量与函数内变量
在Python中,全局变量与局部变量是独立的,函数内修改变量不会影响到全局变量。但是如果全局变量是可变对象,函数内对该对象的修改会影响到全局变量的值。以下是一个示例代码:
运行结果为:
在上述示例中,对全局变量global_var
进行了修改,由于全局变量是可变对象,因此修改会影响到全局变量的值。
总结
在Python中,函数参数传递是按值传递的,对不可变对象的修改不会影响到原始对象,而对可变对象的修改会影响到原始对象。