MST
星途 面试题库

面试题:Python按值调用机制中可变与不可变对象的表现

请解释在Python按值调用机制下,当函数接收一个不可变对象(如整数、字符串)和一个可变对象(如列表、字典)作为参数时,函数内部对参数的修改分别会对原对象产生怎样不同的影响,并举例说明。
13.0万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

不可变对象

  1. 原理:在Python按值调用机制下,不可变对象(如整数、字符串)传递给函数时,函数接收的是对象值的副本。由于不可变对象一旦创建就不能修改,所以函数内部对该参数的修改不会影响原对象。
  2. 示例
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 并未改变。

可变对象

  1. 原理:对于可变对象(如列表、字典),按值调用传递给函数的是对象的引用(本质上也是值,这个值是对象在内存中的地址)。所以函数内部对参数的修改会直接影响原对象。
  2. 示例
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 也会随之改变,因为函数操作的是同一个列表对象。