作者Seudo (进击的三笠)
看板Python
标题Re: [问题] function 的预设值
时间Wed Dec 17 23:19:32 2014
※ 引述《ql4au04 (泡面)》之铭言:
: 今天在练习function时,发现在不同情况下,
: function的预设值会不同
(略
: 後来看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内的值
: 想请问大家,这样的解释是否正确?还是有其他的解释呢?
Python的变数名称是container, 指向某一物件
而每个物件有其id, type, value
像int, string 等value 不能改变的型态为Immutable Object
反之为 Mutable Object, 如list
在编译的时候, 对function的预设值(empty list)产生一个物件
之後每次call这个function 就会指向该物件
所以在
x = spam_2(1) 时, x 指向该物件(empty list)
而 x.append('hello') 使得 function预设值物件的value改为 ['hello']
避免这问题可以把function改写成
def spam_2(a, b=None):
if b is None:
b = []
return b
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.224.138.98
※ 文章网址: http://webptt.com/cn.aspx?n=bbs/Python/M.1418829575.A.DDF.html
1F:→ ql4au04: 感谢您的解答!! 12/21 06:14