python 内存视图memoryview

如果你总是跟数组打交道,却没有听过 memoryview,那就太遗憾了。下面就来谈谈memoryview

memoryview 是一个内置类,它能让用户在不复制内容的情况下操作同一个数组的不同切片。memoryview 的概念受到了 NumPy 的启发。Travis OliphantNumPy的主要作者,他在回答“ When should a memoryview be used?”(http://stackoverflow.com/
questions/4845418/when-should-a-memoryview-be-used/)这个问题时是这样说的: 内存视图其实是泛化和去数学化的 NumPy 数组。它让你在不需要复制内容的前提下,在数据结构之间共享内存。其中数据结构可以是任何形式,比如 PIL 图片、SQLite 数据库和 NumPy 的数组,等等。这个功能在处理大型数据集合的时候非常重要。

memoryview.cast 的概念跟数组模块类似,能用不同的方式读写同一块内存数据,而且内容字节不会随意移动。这听上去又跟 C 语言中类型转换的概念差不多。memoryview.cast 会把同一块内存里的内容打包成一个全新的 memoryview 对象给你。

在如下示例里,我们利用 memoryview 精准地修改了一个数组的某个字节,这个数组的元素是 16 位二进制整数。

# -*- coding: utf-8 -*-
# 通过改变数组中的一个字节来更新数组里某个元素的值


from array import array


numbers = array('h', [-2, -1, 0, 1, 2])
memv = memoryview(numbers)  # 利用含有 5 个短整型有符号整数的数组(类型码是 'h')创建一个 memoryview。
print(len(memv))
# 5
print(memv[0])  # memv 里的 5 个元素跟数组里的没有区别
# -2
memv_oct = memv.cast('B')  # 创建一个 memv_oct,这一次是把 memv 里的内容转换成 'B' 类型,也就是无符号字符。
memv_oct.tolist()  # 以列表的形式查看 memv_oct 的内容
memv_oct[5] = 4  # 把位于位置 5 的字节赋值成 4。
print(numbers)  # 因为我们把占 2 个字节的整数的高位字节改成了 4,所以这个有符号整数的值就变成了 1024。
# array('h', [-2, -1, 1024, 1, 2])

相关推荐

  1. python 内存视图memoryview

    2024-01-21 22:50:02       35 阅读
  2. python内存管理

    2024-01-21 22:50:02       19 阅读
  3. python时间&内存计算

    2024-01-21 22:50:02       12 阅读
  4. python内存泄漏解决

    2024-01-21 22:50:02       13 阅读
  5. 使用python获取内存信息

    2024-01-21 22:50:02       11 阅读
  6. Python是如何实现内存管理的?

    2024-01-21 22:50:02       33 阅读
  7. C++/Python/MATLAB检查内存使用情况

    2024-01-21 22:50:02       35 阅读
  8. Python 监控程序的内存占用量

    2024-01-21 22:50:02       14 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-21 22:50:02       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-21 22:50:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-21 22:50:02       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-21 22:50:02       20 阅读

热门阅读

  1. Mybatis 45_基于嵌套select的一对一关联

    2024-01-21 22:50:02       33 阅读
  2. 模型之预测人口增长

    2024-01-21 22:50:02       37 阅读
  3. 前端世界的跨域挑战

    2024-01-21 22:50:02       30 阅读
  4. Task03:模型架构篇&新的模型架构篇

    2024-01-21 22:50:02       22 阅读
  5. PoEAA笔记-6会话状态

    2024-01-21 22:50:02       33 阅读
  6. Python是如何实现内存管理的?

    2024-01-21 22:50:02       33 阅读
  7. 计算机网络学习笔记(二)OSI模型与TCP-IP模型

    2024-01-21 22:50:02       32 阅读