Python 我还是不知道';I don’我不明白记忆观的意义

Python 我还是不知道';I don’我不明白记忆观的意义,python,python-3.x,memoryview,Python,Python 3.x,Memoryview,我把问题和答案通读一遍。我还是不明白重点 答案中的示例一开始似乎合乎逻辑,但当我构建第三个测试用例时,我通过索引扫描字节对象,它的速度与内存视图一样快 import time # Scan through a bytes object by slicing for n in (100000, 200000, 300000, 400000): data = b'x' * n start = time.time() b = data while b:

我把问题和答案通读一遍。我还是不明白重点

答案中的示例一开始似乎合乎逻辑,但当我构建第三个测试用例时,我通过索引扫描
字节
对象,它的速度与
内存视图
一样快

import time


# Scan through a bytes object by slicing
for n in (100000, 200000, 300000, 400000):
    data = b'x' * n
    start = time.time()
    b = data
    while b:
        b = b[1:]
    print('bytes sliced  ', n, time.time() - start)

# Scan through a bytes object with memoryview
for n in (100000, 200000, 300000, 400000):
    data = b'x' * n
    start = time.time()
    b = memoryview(data)
    while b:
        b = b[1:]
    print('memoryview    ', n, time.time() - start)

# Scan through a bytes object by index
for n in (100000, 200000, 300000, 400000):
    data = b'x' * n
    start = time.time()
    b = data
    for i in range(n):
        b = b[i+1:]
    print('bytes indexed ', n, time.time() - start)
输出:

bytes sliced   100000 0.16396498680114746
bytes sliced   200000 0.6180000305175781
bytes sliced   300000 1.541727066040039
bytes sliced   400000 2.8526365756988525
memoryview     100000 0.02300119400024414
memoryview     200000 0.04699897766113281
memoryview     300000 0.0709981918334961
memoryview     400000 0.0950019359588623
bytes indexed  100000 0.027998924255371094
bytes indexed  200000 0.05700063705444336
bytes indexed  300000 0.08800172805786133
bytes indexed  400000 0.1179966926574707
其中一个参数是,您只需将memoryview对象传递给
struct.unpack
。但是你完全可以用字节对象做同样的事情。据我理解,这与memoryview最终也必须复制片段是一样的


如果你不做傻事的话,坚持使用字节似乎简单多了。

你的前两个基准测试基本上是从左边一个字节一点一点地删除,直到什么都没有剩下

对于
字节
示例,这没有N个副本,对于memoryview,从来没有副本,只是调整了视图的长度


您的上一个示例一点也不相似,而不是啃掉一个字节,而是啃掉越来越多的字节(
b[1://code>
b[2://code>
b[3://code>)——最终字符串耗尽,而您正在切割一个空字符串(更准确地说是在
i*(i+1)/2>n
时)。例如,对于100000字节的序列,您在446次迭代后执行noops

是的,关键点是在
b=b[i+1://code>中,
b
i
都发生了变化。