[pyar] weakref.WeakValueDictionary

Alejandro Santos listas en alejolp.com
Jue Ene 10 14:29:45 ART 2013


2013/1/10 Andres Riancho <andres.riancho en gmail.com>:
> Lista,
>
>     Para solucionar esto se me ocurrio utilizar
> weakref.WeakValueDictionary; pero se ve que algo estoy haciendo mal,
> pero QUE? Les dejo una prueba de concepto que demuestra lo que quiero
> hacer y crashea :(
>

Estás guardando en el WVD valores que pueden ser reclamados
inmediatamente por el gc:

>>> class X(object):
...     def a(self):
...             print 1234
...
>>> x = X()
>>> x.a
<bound method X.a of <__main__.X object at 0x148f9d0>>
>>> id(x.a)
140696105567808
>>> id(x.a)
20981312
>>> id(x.a)
20981312
>>> id(x.a)
20981312
>>> id(x.a)
20981312
>>> import gc
>>> gc.collect
<built-in function collect>
>>> gc.collect()
0
>>> id(x.a)
21138720
>>> id(x.a)
21138720
>>> b = ["a" * y for y in range(1000)]
>>> b = ["a" * y for y in range(1000)]
>>> b = ["a" * y for y in range(1000)]
>>> id(x.a)
21138720
>>> id(x.a)
21138720
>>> gc.collect()
0
>>> id(x.a)
21138720
>>> b = ["b" * y for y in range(10000)]
>>> gc.collect()
0
>>> b = ["b" * y for y in range(100000)]
>>> gc.collect()
0
>>> id(x.a)
21138480


-- 
Alejandro Santos



More information about the pyar mailing list