只看楼主 #交流探讨#切片还是索引
-
阅读:525 回复:2 2022-03-21 08:33:19
-
1. 数组索引的本质:我们都知道,数组是连续存储的空间单位,但其实它指的是在虚拟内存中的连续存储。事实上,我们用数组下标访问一个数据的时候,它会在编译过程中经历两张向量表的映射,本质上就是对应到虚拟内存,再指向物理内存,随后读取数据。大致可以表示成这样的图:
所以说,当使用索引获取值时,它是直接映射到信息向量表的内存地址的,当这个地址不存在时,就会返回错误。
2. 而切片呢,我查阅了相关资料,没有找到python实现切片的底层代码。但是从切片提供的接口(begin, end, step)可以看出,它本质应该是一个迭代器。从这个角度,我找到了一个博主写的模拟切片的迭代方法:
所以说,切片在映射到内存之前,会先经历一个判断的异常捕获,如果抛出异常了,那么能够返回一个空值,从而避免了溢出错误。
这样,其实就很好理解为什么切片获取会比索引获取耗费更多的时间了。因为切片比索引多了两个程序步,导致执行时间变长。
参考资料:
2022-03-21 16:39:20