python - Python 中的 MemoryView 和垃圾收集

标签 python garbage-collection python-3.6 memoryview

基本上:

如果我在某处声明一个字节数组:

arr = bytearray(somestr)

然后创建它的内存 View :

view = memoryview(arr)

我能否确定只要我在某处引用了 View 对象,字节数组就会保留下来?

即:

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

view = foo()

垃圾收集会删除原始字节数组吗?或者说这可以作为引用吗?

最佳答案

可以作为引用。 但是您可以调用release()在 View 上删除该引用:

>>> 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 attribute从 View 访问底层对象。 .

一般来说,任何未明确描述为 weak reference 的内容拥有实际引用。在内存管理语言中,这是默认设置。

关于python - Python 中的 MemoryView 和垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55149011/

相关文章:

python - python中ipv4子网掩码点分二进制的函数生成

memory-management - 将指针设置为 nil 以防止 Golang 中的内存泄漏

java - ESC/POS 打印机状态仅返回意外的两个无符号整数

python - 查找 CSV 文件的总和

python - 安装 geopandas 的问题

python - 为什么我的解析器无法在不崩溃的情况下将 Sprite 绘制到屏幕上?

python - 实时从子进程中读取标准输出

python - PyQt:可编辑的 QTabWidget 选项卡文本

c# - 如何以安全的方式获取弱引用的目标

java - 什么时候收集 perm gen?