python中,func(a,b=[]) 这种写法有什么缺点(可变对象与不可变对象的理解)

一、解释:
因为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]
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值