繁体   English   中英

Python中的MemoryViews和垃圾收集

[英]MemoryViews and Garbage Collection in Python

基本上:

如果我在某处声明一个bytearray:

arr = bytearray(somestr)

然后创建它的内存视图:

view = memoryview(arr)

我可以确定只要我在某个地方引用了视图对象,那么bytearray将会保留吗?

即:

def foo():
    arr = bytearray("hello world")
    return memoryview(arr)

view = foo()

垃圾收集是否会删除原始的bytearray? 或者这算作参考?

它算作参考。 但是,您可以在视图上调用release()以删除该引用:

>>> class A(bytes):
...     def __del__(self):print('called')
... 
>>> a =A()
>>> m = memoryview(a)
>>> del a
>>> m
<memory at 0x7fddcb00a288>
>>> len(m)
0
>>> m.release()
called

请注意,您可以使用obj属性从视图中访问基础对象。

一般来说,任何未明确描述为弱引用的东西都有实际的参考。 在内存管理语言中,这是默认语言。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM