Python冻结对象模块

object-freezer的Python项目详细描述


对象冻结器

用于冻结对象的Python模块。在

安装

$ pip install object-freezer

然后将此模块导入为:

^{pr2}$

示例

列表被冻结为元组:

>>>l=[1,2,3]>>>hash(l)Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>TypeError:unhashabletype:'list'>>>fl=of.freeze(l)>>>hash(fl)2528502973977326415>>>fl(1,2,3)

字典被冻结到deepfrozendict实例中:

>>>importobject_freezerasof>>>d={'a':'A','b':'B'}>>>hash(d)Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>TypeError:unhashabletype:'dict'>>>fd=of.freeze(d)>>>hash(fd)3871628092596788623>>>fd<deepfrozendict{'a':'A','b':'B'}>

如果列表的某个元素不可散列,它也将被冻结:

>>>l=[[1,2],{3:4}]>>>hash(l)Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>TypeError:unhashabletype:'list'>>>fl=of.freeze(l)>>>hash(fl)5879964472677921951>>>fl((1,2),<deepfrozendict{3:4}>)

如果字典的值不可散列,它将被冻结:

>>>importobject_freezerasof>>>d={'a':['A',0],'b':{'B':1}}>>>hash(d)Traceback(mostrecentcalllast):File"<stdin>",line1,in<module>TypeError:unhashabletype:'dict'>>>fd=of.freeze(d)>>>hash(fd)6230706721132225338>>>fd<deepfrozendict{'a':('A',0),'b':<deepfrozendict{'B':1}>}>

已知问题和注意事项

{{cd3>

由于列表被冻结到一个元组中,很明显,of.freeze([key, value])和{}是相同的,因此具有相同的哈希值。但是,of.freeze({key: value})也始终具有相同的哈希值。在

>>>d={1:2}>>>t=(1,2)>>>fd=of.freeze(d)>>>ft=of.freeze(t)>>>hash(fd)==hash(ft)True

因为fd == ft返回{},所以这不是一个大问题。因此,例如,可以使用fd和{}作为不同的字典键。在

>>>fd==ftFalse>>>{fd:0,ft:1}{<deepfrozendict{1:2}>:0,(1,2):1}

许可证

MIT

待办事项

  • []针对各种Python版本进行测试。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
当您有许多具有不同密钥值的位置时,java Enterprise是加密环境变量的正确方法   java如何使用视图保持器模式制作自定义适配器?   java如何迭代Camel体中的嵌套列表?   序列化用base 64进行Java序列化   java打开文件的最佳方式(并确保选择了文件)   java marvin图像色差插件错误   java如何在eclipse中添加属性文件文件夹   比较java。util。日历日期到java。util。日期   java无法在下一个类(活动)中获取哈希表   java如何将这段代码转换为循环?   java查找通过REST失败   java getIntent返回null   在Java中,如何通过外部集合从内部集合检索数据?   java单点登录以保护REST API和内部基于web的系统