Python面试题之下面代码会输出什么
程序员文章站
2023-11-19 20:30:28
答案: [0, 1] [3, 2, 1, 0, 1, 4] [0, 1, 0, 1, 4] 呃? 第一个函数调用十分明显,for循环先后将0和1添加至了空列表l中。l是变量的名字,指向内存中存储的一个列表。 第二个函数调用在一块新的内存中创建了新的列表。l这时指向了新生成的列表。之后再往新列表中添加 ......
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黑洞网,博客园同步跟新
上一篇: MySQL事务及其实现