我有一个双端队列,我们叫它deq
,我需要从两端迭代它,在迭代过程中我不会修改它。
当然,我不想创建 * 另一个 * 双端队列,我考虑过reversed
,但我不知道它是否真的创建了任何副本,例如,如果我写:
reversed_deq = reversed(deq)
它是否会引用完全相同的内存位置,只是简单地反向迭代,而不使用更多的内存/时间?
对于双端队列,这似乎是合乎逻辑的方法,但我希望确保没有遗漏任何内容。
我找不到deque的代码(通常他们有一个“python等价物”,但我找不到),而且由于某种原因--无论我运行什么--timeit
总是给我15到16 ns之间的时间(对于我尝试计时的所有事情,不仅仅是这个)
2条答案
按热度按时间jv2fixgn1#
从C源代码
reversed([deque])
返回一个反向迭代器,没有副本或内存分配。[deque].reverse()
将在适当的位置反转它。mkshixfv2#
Python 2和Python 3文档声明
reversed()
内置函数“返回一个反向迭代器”。严格地说,这并不妨碍collections.deque.__reversed__()
的实现进行复制。实际上,没有理由复制,因为双端队列自然是双向可迭代的。