面试题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, l=[]):
l.append(num)
return l
v1 = func(11) #
v2 = func(22, [55, 66]) #
v3 = func(33) #
print(v1)
print(v2)
print(v3)
好好想想是什么,不要急回答
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 是可变类型,每次调用不会初始化