Найти - Пользователи
Полная версия: Удалить не ссылку на объект, а сам объект
Начало » Python для экспертов » Удалить не ссылку на объект, а сам объект
1
ArtikUA
Как можно удалить не только ссылку на объект а и сам объект таким образом, что бы все ссылки на него так-же удалились?
Например в результате этого кода, по obj2 иobj3 можно достучатся до нашего объекта:
obj1 = MyClass('Test')
obj2 = obj1
obj3 = obj1
del obj1 
А мне надо, что бы по obj2 и obj3 автоматически делался del, т.е по сути нужно удалить сам объект из памяти, что бы
print(obj2)
вывело
NameError: name 'obj2' is not defined
но при этом что бы obj2 я не удалял явно
svas
Можете использовать weakref
In [1]: import weakref
In [2]: class MyClass(object):
   ...:     
   ...:     def __init__(self, text):
   ...:             self.text = text
   ...:         
   ...:     def __repr__(self):
   ...:             return '<MC (%s)>' % self.text
   ...: 
In [3]: obj1 = MyClass('test')
In [4]: obj2 = weakref.ref(obj1)
In [5]: obj3 = weakref.ref(obj1)
In [6]: print obj1
<MC (test)>
In [7]: print obj2(), obj3()
<MC (test)> <MC (test)>
In [8]: del obj1
In [9]: print obj2(), obj3()
None None
FishHook
svas
Неа, не работает
import weakref
class MyClass(object):
     def __init__(self, text):
            self.text = text
     def __repr__(self):
            return '<MC (%s)>' % self.text
obj1 = MyClass('test')
obj2 = weakref.ref(obj1)
obj3 = weakref.ref(obj1)
print obj1
print obj2(), obj3()
del obj1
print obj2(), obj3

<MC (test)>
<MC (test)> <MC (test)>
None <weakref at 0x7f0404cbdec0; dead>
J.R.
.
svas
FishHook
Неа, не работает
В последней строчке скобки
Вместо
print obj2(), obj3
надо
print obj2(), obj3()
ArtikUA
svas
Можете использовать weakref
Спасибо, это то что нужно!
Светлов отлично расписал это: http://asvetlov.blogspot.com/2013/05/gc.html
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB