Python 函数中的引用传递与值传递393


在 Python 中,函数可以接受两种类型的参数:值传递和引用传递。了解这两种传递方式之间的差异至关重要,因为它决定了函数对传递参数的修改是否会影响原参数。

值传递

值传递在 Python 中是默认的行为。当一个值传递给一个函数时,函数会收到该值的副本。这意味着函数对该值的任何修改都不会影响原值。
def change_number(num):
num += 1
my_num = 10
change_number(my_num)
print(my_num) # 输出: 10

在上例中,change_number() 函数接收了 my_num 的副本。因此,对 num 的修改仅影响函数内的副本,不会影响原值 my_num。

引用传递

引用传递可通过使用 mutable 类型(如列表、字典)的参数来实现,并将其作为函数的参数。当一个引用传递给一个函数时,函数会收到对该对象的引用,而不是其副本。
def change_list(my_list):
(10)
my_list = [1, 2, 3]
change_list(my_list)
print(my_list) # 输出: [1, 2, 3, 10]

在上例中,change_list() 函数接收了 my_list 的引用。因此,对 my_list 的修改也会影响原列表 my_list。

确定传递方式

要确定一个参数是值传递还是引用传递,可以使用 id() 函数。id() 函数返回一个对象的内存地址。如果两个对象的 id() 相等,则它们是同一个对象。否则,它们是不同的对象。
def check_id(param):
print("param id:", id(param))
my_num = 10
check_id(my_num) # 输出: param id: 4587390464
my_list = [1, 2, 3]
check_id(my_list) # 输出: param id: 4555665648
print("my_list id:", id(my_list)) # 输出: my_list id: 4555665648

在上例中,对 my_num 的 id() 和传递给函数 check_id() 的参数的 id() 不同。这表明它是值传递。另一方面,对 my_list 的 id() 和传递给函数的参数的 id() 相等。这表明它是引用传递。

影响

了解函数中引用传递与值传递之间的差异很重要,因为它会影响函数对传递参数所做的修改:* 值传递:对值的修改不会影响原值。
* 引用传递:对值的修改也会影响原值。

根据函数的预期行为选择正确的传递方式非常重要。如果函数需要修改传递的参数,则应使用引用传递。否则,应使用值传递。

2024-10-31


上一篇:Python 中封装代码:提升代码质量和可维护性的关键

下一篇:函数赋值给变量——Python 中的变量绑定