Python面试题之下面代码会输出什么

Posted pythonzhichan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python面试题之下面代码会输出什么相关的知识,希望对你有一定的参考价值。

def f(x,l=[]):
    for i in range(x):
        l.append(i*i)
    print l

f(2)
f(3,[3,2,1])
f(3)

答案

[0, 1]
[3, 2, 1, 0, 1, 4]
[0, 1, 0, 1, 4]

呃?

第一个函数调用十分明显,for循环先后将0和1添加至了空列表l中。l是变量的名字,指向内存中存储的一个列表。

第二个函数调用在一块新的内存中创建了新的列表。l这时指向了新生成的列表。之后再往新列表中添加0、1、2和4。很棒吧。

第三个函数调用的结果就有些奇怪了。它使用了之前内存地址中存储的旧列表。这就是为什么它的前两个元素是0和1了。

不明白的话就试着运行下面的代码吧:

l_mem = []

l = l_mem           # the first call
for i in range(2):
    l.append(i*i)

print l             # [0, 1]

l = [3,2,1]         # the second call
for i in range(3):
    l.append(i*i)

print l             # [3, 2, 1, 0, 1, 4]

l = l_mem           # the third call
for i in range(3):
    l.append(i*i)

print l             # [0, 1, 0, 1, 4]

本文首发于Python黑洞网,博客园同步跟新

以上是关于Python面试题之下面代码会输出什么的主要内容,如果未能解决你的问题,请参考以下文章

Python面试题之Python中type和object的关系

python面试题之多线程好吗?列举一些让Python代码以并行方式运行的方法

经典Python面试题之基础80问 Python开发

Python面试题之这两个参数是什么意思:*args,**kwargs?我们为什么要使用它们?

Python经典面试题之网络编程与并发34问

python面试题之你如何管理不同版本的代码?