面试题答案
一键面试差异及原因
- 列表:列表是可变(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
函数尝试修改元组会报错,原元组保持不变。