python 函数调用列表_python-函数-列表-引用

今天面试遇到了一道题

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]

你可能感兴趣的:(python,函数调用列表)