"""A deque is similar to all of the other sequential data structures buthas some implementation details that are different from other sequenceslike a list. This module highlights those differences and shows howa deque can be used as a LIFO stack and a FIFO queue."""from collections import dequedefmain():# A list is identical to a vector where a new array is created when# there are too many elements in the old array, and the old array# elements are moved over to the new array one-by-one. The time# involved with growing its size increases linearly. A deque is# identical to a doubly linked list whose nodes have a left pointer# and a right pointer. In order to grow the linked list, a new node# is created and added to the left, or the right, of the linked list.# The time complexity involved with growing its size is constant.# Check out the source code for a list and a deque here:# https://github.com/python/cpython/blob/3.8/Objects/listobject.c# https://github.com/python/cpython/blob/3.8/Modules/_collectionsmodule.c dq =deque()for i inrange(1, 5):# Similar to adding a new node to the right of the linked list dq.append(i)# Similar to adding a new node to the left of the linked list dq.appendleft(i *2)# A deque can be iterated over to build any data structureassert [el for el in dq] == [8,6,4,2,1,2,3,4]asserttuple(el for el in dq)== (8,6,4,2,1,2,3,4)assert{el for el in dq}=={8,6,4,2,1,3}# A deque can be used as a stack# https://en.wikipedia.org/wiki/Stack_(abstract_data_type)assert dq.pop()==4assert dq.pop()==3# A deque can be used as a queue# https://en.wikipedia.org/wiki/Queue_(abstract_data_type)assert dq.popleft()==8assert dq.popleft()==6if__name__=="__main__":main()