首页 > 试题广场 >

执行以下程序,输出结果为() def fun(a=(),b=

[单选题]
执行以下程序,输出结果为()
def fun(a=(),b=[]):
    a += (1,)
    b.append(1)
    return a,b
fun()
print(fun())
  • ((1,), [1, 1])
  • ((1,1), [1, 1])
  • ((1,), [1])
  • ((1,1), [1])
如果你使用了可变对象(如列表 []、字典 {}、集合 set())作为默认参数,那么这个对象是同一个对象,被所有未传参的函数调用所共享。
那么:所有对 b 的修改会累积,因为 b 指向的是同一个列表对象。

结果:
a 是元组(不可变),每次调用都从默认的 () 开始,a += (1,) 创建新元组,不影响后续调用。
b 是列表(可变),默认值在函数定义时创建一次,所有调用共享同一个列表对象,所以 append(1) 会不断往同一个列表里加元素。


发表于 2025-09-05 21:34:33 回复(0)
太他妈抽象了 这是人能想出来的吗?
发表于 2025-11-10 16:44:08 回复(0)
第一次调用 fun() : ​ - 元组 a 初始为空 () ,执行 a += (1,) 后变为 (1,) (元组不可变,实际是创建新元组)。 ​ - 列表 b 初始为空 [] ,执行 b.append(1) 后变为 [1] (列表可变,直接修改原对象)。 ​  第二次调用 fun() ( print 里的调用): ​ - 元组 a 重新使用默认值 () ,执行 a += (1,) 后仍为 (1,) 。 ​ - 列表 b 的默认值是之前修改后的 [1] ,执行 b.append(1) 后变为 [1, 1] 。 最终返回 ((1,), [1, 1]) 。
发表于 2025-12-16 20:37:09 回复(0)
考察可变对象和不可变对象的内存管理区别。
发表于 2025-11-29 22:26:31 回复(0)