为什么使用迭代中的最后一个maxlen项初始化python deque?

Hai*_*ang 4 python deque

我正在学习如何使用双端队列.这是我做的:

>>> d = deque([1,2,3,4,5,6], maxlen=3)
Run Code Online (Sandbox Code Playgroud)

我预计d会包含[1,2,3].但相反,我得到了:

>>> d
deque([4, 5, 6], maxlen=3)
Run Code Online (Sandbox Code Playgroud)

这不是违反直觉吗?

Ash*_*ary 10

来自docs:

一旦有界长度双端队列已满,当添加新项目时,从对方端丢弃相应数量的项目.有界长度deques提供类似于Unix中的尾部过滤器的功能.它们还可用于跟踪仅涉及最近活动的事务和其他数据池.

所以,你的代码相当于:

>>> from collections import deque
>>> d = deque(maxlen=3)
>>> for i in range(1, 7):
...     d.append(i)
...     print d
...     
deque([1], maxlen=3)
deque([1, 2], maxlen=3)
deque([1, 2, 3], maxlen=3)
deque([2, 3, 4], maxlen=3)
deque([3, 4, 5], maxlen=3)
deque([4, 5, 6], maxlen=3)
Run Code Online (Sandbox Code Playgroud)