[问题] function 的默认值

楼主: ql4au04 (方便面)   2014-12-17 22:07:07
今天在练习function时,发现在不同情况下,
function的默认值会不同
例.
def spam(a,b=40):
print(b)
return b
def spam_2(a,b=[]):
print(b)
return b
//v1
x = spam(1)
x = 100
x = spam(1)
// result : 40 , 40
//v2
x = spam_2(1)
x.append('hello')
x = spam_2(1)
// result : [] , ['hello']
这个结果和我原先想像的不一样,
后来看memory address的差异时发现,
v1在 x = 100 后, x的memory address和spam回传的address不同
v2在 x.append('hello')后,x的memory address和spam_2回传的address相同
我的理解是 python的每个值都是object
赋值是改变address
所以x=40,是把x只向另一个address
而.append是对现有的object做改变
所以x.append('hello'),是更改现在address内的值
想请问大家,这样的解释是否正确?还是有其他的解释呢?
作者: ccwang002 (亮)   2014-12-17 23:12:00
这跟 function 默认值只会初始一次比较有关int 在 Python 中是 immutable 所以不同值是不同位址小的数字会回收利用,所以 id(100) == id(100)但大数字 (ex 55669527) 就会是不同 int object补充一下,你对赋值的理解我看起来没问题
楼主: ql4au04 (方便面)   2014-12-21 06:14:00
谢谢ccwang大的指导!

Links booklink

Contact Us: admin [ a t ] ucptt.com