您的位置:首页 > 编程语言 > Python开发

Python 使用 list 作为函数参数时,默认参数的内存地址是同一个!

2019-03-26 23:20 169 查看

今天碰到这样一道题:

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, 4]

然而事实并不是这样,正确答案应该是
[0, 1]
[3, 2, 1, 0, 1, 4]
[0, 1, 0, 1, 4]

惊了!
在给函数加断点运行之后发现f(3)运行过程中 数组l 的初始值并不是空的.

于是修改了下函数:

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

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

运行结果如下:

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

可以发现list默认参数的地址是同一个!

绝了
你好骚啊…

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐