首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python内存视图的底层机制

Python内存视图的底层机制
EN

Stack Overflow用户
提问于 2017-08-31 22:46:29
回答 1查看 250关注 0票数 1

据说Python的内存视图在切片时不会复制数据。已经完成了许多基准测试,有些是在堆栈过流上进行的,“促成”了这种行为。

当我试图惹他们的时候,我遇到了一种我无法解释的奇怪的行为:

代码语言:javascript
运行
复制
>>> arr = bytearray(range(0,15))
>>> mem = memoryview(arr)
>>> mem[5:15] = mem[0:10]
>>> arr
bytearray(b'\x00\x01\x02\x03\x04\x00\x01\x02\x03\x04\x05\x06\x07\x08\t')

一方面,内存视图“不”复制数据。另一方面,这是完美的!

虽然我很高兴它“起作用了”,但我对它起作用感到悲哀。好吧..。因为它不应该。

如果Python有一个字符缓冲区,结果应该是:

代码语言:javascript
运行
复制
bytearray(b'\x00\x01\x02\x03\x04\x00\x01\x02\x03\x04\x00\x01\x02\x03\x04')

基本上,在写第五个字的时候,它应该是重叠的,并且读到了前面写的第一个字符。这种天真方法的一个例子是:

代码语言:javascript
运行
复制
>>> for i in range(10):
...    m[i+5] = m[i]
>>> a
bytearray(b'\x00\x01\x02\x03\x04\x00\x01\x02\x03\x04\x00\x01\x02\x03\x04')

我尝试将内存视图的大小增加到大量,但它仍然有效,这意味着python在后台复制数据,使内存视图对象变得毫无意义。

这里有我错的地方吗?有什么解释吗?那么记忆视图是如何工作的呢?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45991099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档