说说 Python 的内存视图

作者: deniro | 来源:发表于2020-10-21 20:11 被阅读0次

Python 的内存视图(memoryview)是一个内置类,它能取出数组中的某一部分作为切片进行处理。切片的任何变化都会影响到数组。

NumPy 的作者 Travis Oliphant 是这样看待内存视图的:内存视图其实是泛化和去数学化的 NumPy 数组。它让我们可以在不需要复制内容的前提下,实现在数据结构之间共享内存。其中数据结构可以是任何形式,比如 PIL 图片 、SQLite 数据库和 NumPy 数组等等。对于处理大型数据集合的场景,这个功能非常重要。

PIL:Python Imaging Library,是 python 第三方图像处理库。

memoryview.cast() 方法能以不同的方式读写同一块内存数据,而且是以字节级别进行操作。

Luciano Ramalho 举了一个示例:利用 memoryview 如何准确地修改一个数组中的某个字节数据。

numbers = array.array('h', [-2, -1, 0, 1, 2])
memv = memoryview(numbers)
logging.info('len(memv) -> %s', len(memv))

logging.info('memv[0] -> %s', memv[0])

memv_oct = memv.cast('B')
list = memv_oct.tolist()
logging.info('list -> %s', list)

memv_oct[5] = 4
logging.info('numbers -> %s', numbers)

运行结果:

INFO - len(memv) -> 5
INFO - memv[0] -> -2
INFO - list -> [254, 255, 255, 255, 0, 0, 1, 0, 2, 0]
INFO - numbers -> array('h', [-2, -1, 1024, 1, 2])
  1. 首先创建一个含有 5 个短整型有符号整数的数组;
  2. 接着创建这个数组的内存视图。可以发现它跟数组有着相同的元素个数,而且里面所包含的元素也与数组相同;
  3. 然后把这个有符号整数的内存视图转换为无符号字符的内存视图。会发现这个新的内存视图变为拥有 10 个元素的数组;
  4. 接着在新的内存视图中,把索引位置为 5 的字节赋值成 4,也就是修改占 2 个字节整数的高位字节。这样原数组中的第 3 个值就变为 1024(256 × 4)。

相关文章

  • 说说 Python 的内存视图

    Python 的内存视图(memoryview)是一个内置类,它能取出数组中的某一部分作为切片进行处理。切片的任何...

  • iOS 视图控制器的生命周期

    创建对象,分配内存空间 初始化这块内存空间 加载视图 视图加载完成 视图将要出现 视图已经出现 视图将要消失 视图...

  • 2018-10-25 026 不用列表 D

    内存视图 今天要介绍的是——内存视图(memoryview)。内存视图的主要功能就是让我们在不复制内容的情况下对同...

  • 内存视图

    Time: 2019-08-03 如果总是和数组打交道,而没有听过memoryview,那就太遗憾了。 用不同的方...

  • 看完这一篇,Python Django 你就学会一半了

    Python Django 视图 01 视图返回 JSON 数据 在真实工作中 ,Python Web 工程师会向...

  • Django类视图笔记整理

    Django基于类的视图 1.基于类的视图简介 基于类的视图使用Python 对象实现视图,它提供除函数视图之外的...

  • Linux进程的虚拟地址空间描述

    通过虚拟内存的概念,操作系统为每一个进程提供完全一致的内存视图,这个内存视图的地址空间,叫虚拟地址空间。 从每个进...

  • UIViewController

    UIViewController职责视图管理处理与视图相关的通知实现容器视图控制器内存管理生命周期 UIViewC...

  • APP运行时内存分析

    APP运行时内存分析 1.启动eclipse后,切换到DDMS视图,并确认Devices视图、Heap视图都是打开...

  • iOS文档补完计划--UIViewController

    目录 UIViewController职责视图管理处理与视图相关的通知实现容器视图控制器内存管理生命周期 以代码的...

网友评论

    本文标题:说说 Python 的内存视图

    本文链接:https://www.haomeiwen.com/subject/mdzguktx.html