面试题答案
一键面试不可变对象
- 原理:在Python按值调用机制下,不可变对象(如整数、字符串)传递给函数时,函数接收的是对象值的副本。由于不可变对象一旦创建就不能修改,所以函数内部对该参数的修改不会影响原对象。
- 示例:
def modify_int(num):
num = num + 1
return num
original_num = 5
result = modify_int(original_num)
print(f"原对象: {original_num}")
print(f"函数内修改后返回值: {result}")
上述代码中,original_num
作为整数传递给 modify_int
函数,函数内对 num
的修改(num = num + 1
)只是在函数内部创建了一个新的整数对象,原 original_num
并未改变。
可变对象
- 原理:对于可变对象(如列表、字典),按值调用传递给函数的是对象的引用(本质上也是值,这个值是对象在内存中的地址)。所以函数内部对参数的修改会直接影响原对象。
- 示例:
def modify_list(lst):
lst.append(4)
return lst
original_list = [1, 2, 3]
result = modify_list(original_list)
print(f"原对象: {original_list}")
print(f"函数内修改后返回值: {result}")
上述代码中,original_list
作为列表传递给 modify_list
函数,函数内通过 append
方法对列表进行修改,原 original_list
也会随之改变,因为函数操作的是同一个列表对象。