[Python] 冻结字典和集合

2.5 冻结字典和集合

一般情况下,创建好字典和集合之后可以对其中的元素进行添加或删除。但是有时,我们出于某种原因需要将字典和集合进行冻结,不允许对其中的元素进行添加或删除。这个时候,我们就可以使用MappingProxyType函数和frozenset函数直接创建或冻结字典或集合。
创建冻结字典

from icecream import ic
from types import MappingProxyType
dct = MappingProxyType({'a': 1})
try:
    del dct['a']
except TypeError as err:
ic(err)

ic| err: TypeError(“‘mappingproxy’ object does not support item deletion”)

冻结集合

from icecream import ic
st = {1, 2}
st.add(3)
ic(st)
st = frozenset(st)
try:
    st.add(4)
except AttributeError as err:
    ic(err)

ic| st: {1, 2, 3}
ic| err: AttributeError(“‘frozenset’ object has no attribute ‘add’”)

可以看到,冻结之后的字典或集合就不能添加元素进去,也不能删除元素了。接下来测试一下,冻结的字典和集合的哈希属性:

from icecream import ic
from types import MappingProxyType
st = frozenset({1, 2})
dct = MappingProxyType({'a': 1})
ic(hash(st))
ic(hash(dct))

ic| hash(st): -1826646154956904602
Traceback (most recent call last):
File “E:/BaiduNetdiskWorkspace/FrbPythonFiles/t1.py”, line 7, in
ic(hash(dct))
TypeError: unhashable type: ‘mappingproxy’

我们看到,冻结后的集合变得可哈希了,但是冻结的字典还是不可哈希。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0思必得0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值