当传入实参的类型为……时,……
1、若传入实参为整数、浮点数、布尔值、字符串等不可变类型时,在函数内部进行修改不会影响到原始实参的值 --- 这样说法对吗?2、若传入实参为元组(也属于不可变类型/但属于容器类型),在函数内部进行修改也不会影响到原始实参的值 --- 这样说法对吗?可否举例说明?
3、若传入实参为列表、字典等可变类型(属于容器类型)时,,在函数内部进行修改会影响到原始实参的值 --- 这样说法对吗?
本帖最后由 歌者文明清理员 于 2023-6-1 16:38 编辑
对的,不可变类型的实参在函数内部修改不会影响到原始实参的值。因为不可变类型是指其值不可被修改,而修改实参的值就相当于创建了一个新的对象,而不是修改原始实参对象本身。
对的,元组虽然属于容器类型,但它本身是不可变类型,因此在函数内部进行修改不会影响到原始实参的值。例如:
def modify_tuple(t):
t += (4, 5)
print(t)
my_tuple = (1, 2, 3)
modify_tuple(my_tuple)# 输出 (1, 2, 3, 4, 5)
print(my_tuple)# 输出 (1, 2, 3)
对的,在函数内部对可变类型的实参进行修改会影响到原始实参的值,因为可变类型的实参指向的是同一块内存地址,所以在函数内部对它进行的修改会反映在原始实参中。例如:
def modify_list(lst):
lst.append(4)
print(lst)
my_list =
modify_list(my_list)# 输出
print(my_list)# 输出 1. 正确。对于整数、浮点数、布尔值、字符串等不可变类型,函数内部进行修改会创建一个新的对象,而不影响原始实参的值。
2. 正确。元组也是不可变类型,因此在函数内部进行修改同样会创建一个新的对象,原始实参的值不会受到影响。
def foo(x):
print(f"x的id:{id(x)}")
x = x + (4,)
print(f"执行操作后x的id:{id(x)}")
t = (1, 2, 3)
print(f"t的id:{id(t)}")
foo(t)
print(f"执行函数后t的id:{id(t)}")
输出结果:
t的id:3094057667472
x的id:3094057667472
执行操作后x的id:3094060192208
执行函数后t的id:3094057667472
3. 正确。列表、字典等可变类型在函数内部进行修改时,直接修改的是对象本身,而不是创建一个新的对象。这意味着原始实参的值会受到影响。
def bar(x):
print(f"x的id:{id(x)}")
x.append(4)
l =
print(f"l的id:{id(l)}")
bar(l)
print(f"执行函数后l的值为:{l}")
输出结果:
l的id:48765784
x的id:48765784
执行函数后l的值为:
求最佳答案
页:
[1]