[Python-ideas] Support other dict types for type.__dict__

Eric Snow ericsnowcurrently at gmail.com
Tue Feb 28 00:48:29 CET 2012


On Mon, Feb 27, 2012 at 12:18 PM, Eric Snow <ericsnowcurrently at gmail.com> wrote:
> On Mon, Feb 27, 2012 at 11:45 AM, Mark Janssen
> <dreamingforward at gmail.com> wrote:
>> On Mon, Feb 27, 2012 at 11:35 AM, Rob Cliffe <rob.cliffe at btinternet.com> wrote:
>>> I suggested a "mutable" attribute some time ago.
>>> This could lead to finally doing away with one of Python's FAQs: Why does
>>> python have lists AND tuples?  They could be unified into a single type.
>>> Rob Cliffe.
>>
>> Yeah, that would be cool.  It would force (ok, *allow*) the
>> documenting of any non-mutable attributes (i.e. when they're mutable,
>> and why they're being set immutable, etc.).
>>
>> There an interesting question, then, should the mutable bit be on the
>> Object itself (the whole type) or in each instance....?  There's
>> probably no "provable" or abstract answer to this, but rather just an
>> organization principle to the language....
>
> In contrast to a flag on objects, one alternative is to have a
> __mutable__() method for immutable types and __immutable__() for
> mutable types.  I'd be nervous about being able to make an immutable
> object mutable at an arbitrary moment with the associated effect on
> the hash of the object.

Just to be clear, I meant that __mutable__() would return a mutable
version of the object, of a distinct mutable type, if the object
supported one.  So for a tuple, it would return the corresponding
list.  These would be distinct objects.  Likewise obj.__immutable__()
would return a separate, immutable version of obj.

Such an approach could be applied to lists/tuples, sets/frozensets,
strings/bytearrays, bytes/bytearrays, and any other pairings we
already have.  Unless a frozendict were added as a standard type, dict
would not have a match so an __immutable__() method would not be
added.  In that case, trying to call dict.__immutable__() would be an
AttributeError, as happens now.

-eric



More information about the Python-ideas mailing list