一、解释:
因为b是可变类型,每次调用这个方法b不会每次都初始化[ ]
二、通过一段代码来理解:
代码
def func(a,b=[]):
b.append(a)
print(b)
if __name__ == '__main__':
func(33)
func(33)
func(33)
三、执行结果:
33是不断被追加进b里的,并不是会每次调用都被初始化成空列表
[33]
[33, 33]
[33, 33, 33]
四、什么是可变对象/不可变对象:
Python数据类型
数字,字符串,元组,列表,字典
不可变类型:数字,字符串,元组
可变类型:列表,字典
(1)不可变对象:
对象存放在地址中的值不会被改变(所谓的改变是创建了一块新的地址,并把新的对象的值放在新地址中,原来的对象并没有发生变化)
【int 、float 、bool、tuple 、string 】都属于不可变对象 ,其中tuple有些特殊
(2)可变对象:
对象存放在地址中的值会原地改变。变量改变后,实际上是其所指的值直接发生改变,并没有发生复制行为,也没有开辟新的出地址,通俗点说就是原地改变
【list 、dict 、set】都属于可变对象
在python中,一切事物皆是对象,变量是对象在内存中的存储和地址的抽象。
类型是属于对象的,而不是变量, 变量和对象是分离的,对象是内存中储存数据的实体,变量则是指向对象的指针。
六、代码
---------不可变对象例子------------------------------------------------:
a = 'hello'
print( id(a))
print(a)
print()
a = 'world'
print( id(a))
print(a)
输出:
31024216
hello
37109352
world
---------可变对象例子------------------------------------------------:
list = [1, 2, 3]
print(id(list))
print(list)
print()
list.append(4)
print(id(list))
print(list)
输出
30237256
[1, 2, 3]
30237256
[1, 2, 3, 4]