How to make an immutable instance

Tim Peters tim.peters at gmail.com
Fri Jun 18 05:31:52 CEST 2004


[Batista, Facundo]
> I'm working on Decimal, and one of the PEP requests is Decimal to be
> immutable.

I wouldn't worry about this.  The most important thing about
immutability is that we promise the *implementation* of Decimal won't
mutate a user-visible Decimal object.  There's no way to prevent a
determined idiot from mutating one themself in Python, and trying
anyway leads to slower, bigger, uglier, more obscure code.

When/if Decimal is recoded in C, it will be easy to make it "truly
immutable".  If you think you have to try in Python anyway, then yes,
read-only properties are the intended way to get an idiot-resistant
approximation to immutability.

It should be enough (IMO) to give Decimal data members names with a
single leading underscore.  That's fair warning that users aren't
supposed to muck with them.  I've lived to regret it every time I've
given a data member a "private name" (two leading underscores) --
that's no better at truly stopping determined users from cheating
anyway, and has invariably created problems over time when refactoring
code.




More information about the Python-list mailing list