面试题答案
一键面试按引用调用机制基本原理
在Python中,按引用调用意味着函数传递的是对象的引用(内存地址)而不是对象本身的副本。当函数被调用时,参数被绑定到函数内部的局部变量,这些局部变量指向与传入参数相同的对象。这使得函数内部对对象的修改会反映到函数外部,前提是对象是可变的。
不可变对象在按引用调用时的表现
不可变对象(如整数、字符串)一旦创建,其值就不能被修改。当不可变对象作为参数传递给函数时,虽然传递的是引用,但由于对象不可变,函数内无法直接修改传入的对象。例如:
def modify_number(num):
num = num + 1
return num
original_num = 5
result = modify_number(original_num)
print(original_num)
print(result)
在上述代码中,original_num
的值仍然是5,因为num
在函数内得到了一个新的对象(num + 1
),而不是修改了传入的original_num
对象。
可变对象在按引用调用时的表现
可变对象(如列表、字典)可以在创建后修改其内容。当可变对象作为参数传递给函数时,函数内对对象的修改会直接影响到函数外部的对象。例如:
def modify_list(lst):
lst.append(4)
return lst
original_list = [1, 2, 3]
result_list = modify_list(original_list)
print(original_list)
print(result_list)
在上述代码中,original_list
和result_list
都为[1, 2, 3, 4]
,因为函数modify_list
通过引用直接修改了传入的列表对象。