[Python-Dev] PEP 351, the freeze protocol
Nick Coghlan
ncoghlan at gmail.com
Tue Oct 25 11:26:58 CEST 2005
Josiah Carlson wrote:
> Nick Coghlan <ncoghlan at gmail.com> wrote:
>> I think having dicts and sets automatically invoke freeze would be a mistake,
>> because at least one of the following two cases would behave unexpectedly:
>
> I'm pretty sure that the PEP was only aslomg if one would freeze the
> contents of dicts IF the dict was being frozen.
>
> That is, which of the following should be the case:
> freeze({1:[2,3,4]}) -> {1:[2,3,4]}
> freeze({1:[2,3,4]}) -> xdict(1=(2,3,4))
I believe the choices you intended are:
freeze({1:[2,3,4]}) -> imdict(1=[2,3,4])
freeze({1:[2,3,4]}) -> imdict(1=(2,3,4))
Regardless, that question makes a lot more sense (and looking at the PEP
again, I realised I simply read it wrong the first time).
For containers where equality depends on the contents of the container (i.e.,
all the builtin ones), I don't see how it is possible to implement a sensible
hash function without freezing the contents as well - otherwise your immutable
isn't particularly immutable.
Consider what would happen if list "__freeze__" simply returned a tuple
version of itself - you have a __freeze__ method which returns a potentially
unhashable object!
Cheers,
Nick.
--
Nick Coghlan | ncoghlan at gmail.com | Brisbane, Australia
---------------------------------------------------------------
http://boredomandlaziness.blogspot.com
More information about the Python-Dev
mailing list