Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 4, 2015 10:43:44

ArtikUA
Зарегистрирован: 2015-05-14
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Удалить не ссылку на объект, а сам объект

Как можно удалить не только ссылку на объект а и сам объект таким образом, что бы все ссылки на него так-же удалились?
Например в результате этого кода, по obj2 иobj3 можно достучатся до нашего объекта:

obj1 = MyClass('Test')
obj2 = obj1
obj3 = obj1
del obj1 
А мне надо, что бы по obj2 и obj3 автоматически делался del, т.е по сути нужно удалить сам объект из памяти, что бы
print(obj2)
вывело
NameError: name 'obj2' is not defined
но при этом что бы obj2 я не удалял явно

Офлайн

#2 Авг. 4, 2015 11:32:35

svas
От:
Зарегистрирован: 2010-01-27
Сообщения: 239
Репутация: +  9  -
Профиль   Отправить e-mail  

Удалить не ссылку на объект, а сам объект

Можете использовать 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



Офлайн

#3 Авг. 4, 2015 11:39:13

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Удалить не ссылку на объект, а сам объект

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>



Офлайн

#4 Авг. 4, 2015 11:50:22

J.R.
Зарегистрирован: 2015-07-18
Сообщения: 147
Репутация: +  16  -
Профиль  

Удалить не ссылку на объект, а сам объект

.

Отредактировано J.R. (Фев. 27, 2016 16:04:16)

Офлайн

#5 Авг. 4, 2015 12:51:43

svas
От:
Зарегистрирован: 2010-01-27
Сообщения: 239
Репутация: +  9  -
Профиль   Отправить e-mail  

Удалить не ссылку на объект, а сам объект

FishHook
Неа, не работает
В последней строчке скобки
Вместо
print obj2(), obj3
надо
print obj2(), obj3()



Отредактировано svas (Авг. 4, 2015 12:52:09)

Офлайн

#6 Авг. 4, 2015 14:41:31

ArtikUA
Зарегистрирован: 2015-05-14
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Удалить не ссылку на объект, а сам объект

svas
Можете использовать weakref
Спасибо, это то что нужно!
Светлов отлично расписал это: http://asvetlov.blogspot.com/2013/05/gc.html

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version