python练习题

面试题1:打印的v1,v2,v3,分别是什么?

先不要执行,看代码写答案。

def func(num, l=[]):
    l.append(num)
    return l

v1 = func(11)  # 
v2 = func(22, [55, 66])  # 
v3 = func(33)  # 

print(v1)
print(v2)
print(v3)

好好想想是什么,不要急回答

面试题2:

def func(a, b=[])这种写法有什么陷阱?

def func(num, list=[]):
    print(id(list))
    list.append(num)
    return list


print(func(11))
print(func(22, [55, 66]))
print(func(33))

通过以上代码可以看到第一次和第三次的list在内存的地址是一样的。
所以第一次输出是[11], 第三次输出是[11, 33]
第二次输出没有异议。

坑就是 b 是可变类型,每次调用不会初始化