搞懂可变和不可变内置对象有利于理解函数参数的副作用
- 那些是可变对象?那些不可变?
- 不可变对象bool/int/float/tuple/str/frozenset
- 可变对象list/set/dict
小测试:输出什么结果?
def clear_list(l):
l = []
ll = [1,2,3]
clear_list(ll)
print(ll) ------[1, 2, 3]
python可变参数作为默认参数。
!!!记住默认参数只计算一次
def flist(l = [1]):
l.append(1)
print(l)
flist()------[1,1]
flist()------[1, 1,1]
i = 73
i+=2
修改对象的值,并不会在原来的内存地址中对值进行修改,而是会在一块新的内存区域内创建新值,然后将原变量指向新地址,原内存区域内的对象也不会发生变化,也就是原来位置上还是73,他之后会被python当做垃圾进行回收,这就是不可变对象。