Why GIL?

Hrvoje Niksic hniksic at xemacs.org
Sat Jan 24 09:33:58 CET 2009

Carl Banks <pavlovevidence at gmail.com> writes:

> On Jan 23, 11:45 pm, Bryan Olson <fakeaddr... at nowhere.org> wrote:
>> Carl Banks wrote:
>> > Classes in Python are mutable types, usually.  Class instances are
>> > (except for the refcount) immutable objects, usually.
>> There's where we disagree. I assert that class instances are usually
>> mutable objects.
> Nope, you're dead wrong, nothing more to it.  The bits of a class
> instance never change.  The __dict__ is a mutable object.  The class
> instance itself isn't.  It's not reasonable to call an object whose
> bits can't change a mutable obect.

The "bits" of class instances can very well change.

>>> class X(object): pass
>>> x = X()
>>> d = x.__dict__
>>> x.__dict__ = {}
>>> map(id, [d, x.__dict__])
[170329876, 170330012]

The Python cookbook even describes patterns that depend on this
operation working.  Class instance's contents can also change if
__slots__ is in use, when its __class__ is assigned to (admittedly the
latter being a rare operation, but still).

> Anyway, all you're doing is distracting attention from my claim that
> instance objects wouldn't need to be locked.  They wouldn't, no
> matter how mutable you insist these objects whose bits would never
> change are.

Only if you're not implementing Python, but another language that
doesn't support __slots__ and assignment to instance.__dict__.

More information about the Python-list mailing list