lzb1001 发表于 2023-6-1 16:31:01

当传入实参的类型为……时,……

1、若传入实参为整数、浮点数、布尔值、字符串等不可变类型时,在函数内部进行修改不会影响到原始实参的值 --- 这样说法对吗?

2、若传入实参为元组(也属于不可变类型/但属于容器类型),在函数内部进行修改也不会影响到原始实参的值 --- 这样说法对吗?可否举例说明?

3、若传入实参为列表、字典等可变类型(属于容器类型)时,,在函数内部进行修改会影响到原始实参的值 --- 这样说法对吗?

歌者文明清理员 发表于 2023-6-1 16:37:02

本帖最后由 歌者文明清理员 于 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)# 输出

sfqxx 发表于 2023-6-1 16:37:59

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]
查看完整版本: 当传入实参的类型为……时,……