In article <[EMAIL PROTECTED]>, Peter Hansen <[EMAIL PROTECTED]> wrote:
> Steven Bethard wrote: > > Ron Garret wrote: > >> None of the native types (int, float, list, tuple, etc.) can have weak > >> references, but wrapping them in a class is supposed to get around > >> that. And it does -- for all classes except str. > > > > Interesting. Is the wrapping thing documented somewhere? I didn't see > > it in the documentation for weakref.ref (though I have been known to be > > blind occasionally) ;) > > I believe it's here: http://docs.python.org/lib/module-weakref.html > if you search for the string "Not all" and read the next two > paragraphs. > > On the other hand, it says (there) only that "several builtin > types such as list and dict ... can add support through > subclassing", and does not say anything about int, str, etc... Empirically: >>> from weakref import ref >>> def foo(c): ... class C(c): pass ... ref(C()) ... >>> foo(int) >>> foo(float) >>> foo(dict) >>> foo(list) >>> foo(str) Traceback (most recent call last): File "<stdin>", line 1, in ? File "<stdin>", line 3, in foo TypeError: cannot create weak reference to 'C' object >>> foo(tuple) Traceback (most recent call last): File "<stdin>", line 1, in ? File "<stdin>", line 3, in foo TypeError: cannot create weak reference to 'C' object >>> foo(long) Traceback (most recent call last): File "<stdin>", line 1, in ? File "<stdin>", line 3, in foo TypeError: cannot create weak reference to 'C' object >>> Ah, it appears that non-immediate immutable types don't support weakrefs. Hm... rg -- http://mail.python.org/mailman/listinfo/python-list