作者ql4au04 (泡面)
看板Python
标题[问题] function 的预设值
时间Wed Dec 17 22:07:07 2014
今天在练习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内的值
想请问大家,这样的解释是否正确?还是有其他的解释呢?
--
Sent from my CASIO fx-991es .
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.116.164.179
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Python/M.1418825232.A.D88.html
1F:→ ccwang002: 这跟 function 预设值只会初始一次比较有关 12/17 23:12
2F:→ ccwang002: int 在 Python 中是 immutable 所以不同值是不同位址 12/17 23:18
3F:→ ccwang002: 小的数字会回收利用,所以 id(100) == id(100) 12/17 23:19
4F:→ ccwang002: 但大数字 (ex 55669527) 就会是不同 int object 12/17 23:21
5F:→ ccwang002: 补充一下,你对赋值的理解我看起来没问题 12/17 23:24
6F:→ ql4au04: 谢谢ccwang大的指导! 12/21 06:14