Python dict.clear()与dict={}的区别

我们知道重置字典可以使用 clear()函数来实现,也可以使用{}置空,但是这两者实际上是有区别的

例如从下面两个例子来查看:

例子1:

>>> x = {}
>>> y = x
>>> x["hello"] = "world"
>>> y
{'hello': 'world'}
>>> x
{'hello': 'world'}
>>> x = {}
>>> x
{}
>>> y
{'hello': 'world'}

我们知道 y = x 是Python的浅复制,两个指向同一个字典对象,当x发生改变时,y也会发生改变,但是当我们使用x = {},相当于给 x 重新赋值了一个空字典,y 还是指向原来的字典对象,所以y是不变的,但是 x变为新的空字典

例子2:

>>> x = {}
>>> y = x
>>> x["hello"] = "world"
>>> x
{'hello': 'world'}
>>> y
{'hello': 'world'}
>>> x.clear()
>>> x
{}
>>> y
{}

例子2 和例子1 的区别之处在于 重置 x时,例子1 使用了赋空字典的办法,例子2 使用了clear()的方法,

但是对y的影响就比较大了,例子2的y也被置空了,相当于 clear()的效果是在指向的内存对象不变的情况下,重置了一下内存里面保存的数值,导致两个指向该内存的字典对象都被置空了

总结:
使用clear() 有什么好处呢?在常规使用时,例子1和例子2的方法没有什么区别,但是当存在赋值的情况下,可能会有如下2点错误:

  1. 当y值被别的函数引用时,例子1 很容易会造成字典内容错误;
  2. 可能存在内存泄漏的情况,y值可能得不到有效释放
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值