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]

猜你喜欢

转载自www.cnblogs.com/deepstack/p/10950558.html