今天面试遇到了一道题
def func(a,l=[]):
l.append(a)
return l
func('a')
func('abc',[1,2,3,4])
func(10)
['a']
[1,2,3,4,'abc']
['a',10]
但是你要是继续执行func()函数内部的list容器的内容就一直在变,这只是没有赋值的情况下,要是赋值呢?
从下面的代码发现在编写代码时,注意函数和引用问题。因为有在函数中定义了一个列表容器,并且它在函数定义时创建。因为函数返回的是列表容器的引用,所以后面的执行结果对前面的造成影响。通俗点讲,就是两个变量同时引用了该容器的地址。地址内数据发生改变对两个变量都会有影响,也可以说是浅拷贝。
In [17]: def func(a,l=[]): ...: l.append(a) ...: return l ...: ...: In [18]: l1 = func('a') In [19]: l2 = func('abc',[1,2,3,4]) In [20]: l3 = func(10) In [21]: print(l1,l2,l3) ['a', 10] [1, 2, 3, 4, 'abc'] ['a', 10]