MST

星途 面试题库

面试题:Python列表和元组在函数参数传递中的表现差异

当把列表和元组作为参数传递给函数时,它们的表现会有所不同。请详细描述这种差异,并解释原因,同时给出具体的代码示例进行演示。
16.7万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

差异及原因

  • 列表:列表是可变(mutable)的数据类型。当列表作为参数传递给函数时,函数内部对列表的修改会影响到原始列表。这是因为在Python中,函数传递的是对象的引用,对于可变对象,通过引用在函数内修改对象,外部引用指向的对象也会改变。
  • 元组:元组是不可变(immutable)的数据类型。当元组作为参数传递给函数时,函数无法直接修改元组的内容。如果尝试修改元组,会引发TypeError。这是因为不可变对象的特性决定了其内容不能被改变。

代码示例

# 定义一个修改列表的函数
def modify_list(lst):
    lst.append(4)
    return lst

# 定义一个尝试修改元组的函数
def try_modify_tuple(tup):
    try:
        tup = tup + (4,)  # 这里并不是修改原元组,而是创建了一个新的元组
        return tup
    except TypeError as e:
        return e

# 测试列表作为参数
my_list = [1, 2, 3]
result_list = modify_list(my_list)
print(f"原列表: {my_list}, 修改后的列表: {result_list}")

# 测试元组作为参数
my_tuple = (1, 2, 3)
result_tuple = try_modify_tuple(my_tuple)
print(f"原元组: {my_tuple}, 尝试修改后的结果: {result_tuple}")

在上述代码中,modify_list函数对传入的列表进行了修改,原列表也随之改变;而try_modify_tuple函数尝试修改元组会报错,原元组保持不变。