Jua*_*nti 8 python garbage-collection reference weak-references del
你有类似的东西:
x = "something"
b = x
l = [b]
Run Code Online (Sandbox Code Playgroud)
如何删除只有一个引用的对象,比如x?
del x不会做的伎俩; 例如,仍然可以从b访问该对象.
我现在看到的唯一的解决办法是,你应该确保你持有的唯一参考x,每个人都必须不能得到x本身,而是弱引用指向x.weakref模块中实现了弱引用,您可以这样使用它:
>>> import weakref
>>> class TestClass(object):
... def bark(self):
... print "woof!"
... def __del__(self):
... print "destructor called"
...
>>> x = TestClass()
>>> b = weakref.proxy(x)
>>> b
<weakproxy at 0x7fa44dbddd08; to TestClass at 0x7fa44f9093d0>
>>> b.bark()
woof!
>>> del x
destructor called
>>> b.bark()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ReferenceError: weakly-referenced object no longer exists
Run Code Online (Sandbox Code Playgroud)
但请注意,并非所有类都可以弱引用.特别是,大多数内置类型都不能.如果你将它们(如dict)子类化,那么某些内置类型可能是弱引用的,但是其他类型不能(比如int).
你没有.这就是重点.想象一下,如果l是在你控制范围之外的库中.它完全有权期望收集元素不会消失.
另外,想象一下,否则.你在这里有关于"如何阻止他人删除我的对象?"的问题.作为语言设计师,您无法满足这两种要求.
| 归档时间: |
|
| 查看次数: |
16225 次 |
| 最近记录: |