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}
许可证
待办事项
- []针对各种Python版本进行测试。在
标签:
- 项目
推荐PyPI第三方库
由于列表被冻结到一个元组中,很明显,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}
许可证
待办事项
- []针对各种Python版本进行测试。在
- 项目
标签: