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

python中函数的默认参数为list时出现异常分析

2016-11-25 21:55 471 查看
遇到一个奇怪的现象:

'''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)
'''


讲道理来说输出应该是

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


可是发现python不讲道理了

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


一脸懵逼!

前两个能看懂,最后一个什么鬼?

找了一圈终于被我发现,要弄清楚这个问题得先弄清楚python函数默认参数时怎么工作的

'''python
def test(x,y=1):
print 'y的内存:%s' % id(y)
test(1)
test(2,1)
test(3,2)
test(4)
'''


输出:

'''python
y的内存:30832264
y的内存:30832264
y的内存:30832240
y的内存:30439048
'''


发现了什么?

对!y的内存不会随我们调用函数改变!除非你传入不一样的y的值!

搞清楚这一点之后还需要知道,列表不随它的扩大,减小而改变内存!

'''python
L = []
print id(L)
L.append(1)
print id(L)
'''


输出

39870344
39870344


懂了吧!

还不懂?

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