https://github.com/python/cpython/blob/v3.8.1/Modules/_collectionsmodule.c

A dequeobject is composed of a doubly-linked list of block nodes.

So yes, a deque is a (doubly-)linked list as another answer suggests.

Elaborating: What this means is that Python lists are much better for random-access and fixed-length operations, including slicing, while deques are much more useful for pushing and popping things off the ends, with indexing (but not slicing, interestingly) being possible but slower than with lists.

Answer from JAB on Stack Overflow
🌐
Python
docs.python.org › 3 › library › collections.html
collections — Container datatypes
Deques are a generalization of stacks and queues (the name is pronounced “deck” and is short for “double-ended queue”).
🌐
GeeksforGeeks
geeksforgeeks.org › python › deque-in-python
Deque in Python - GeeksforGeeks
A deque stands for Double-Ended Queue. It is a special type of data structure that allows to add and remove elements from both ends efficiently.
Published   3 days ago
Discussions

How are deques in Python implemented, and when are they worse than lists? - Stack Overflow
I've recently gotten into investigating how various data structures are implemented in Python in order to make my code more efficient. In investigating how lists and deques work, I found that I can... More on stackoverflow.com
🌐 stackoverflow.com
queue - How Does Deque Work in Python - Stack Overflow
I am having trouble understanding how the deque works in the snippet of code below, while trying to recreate a queue and a stack in Python. Stack Example - Understood stack = ["a", "b", "c"] # p... More on stackoverflow.com
🌐 stackoverflow.com
When would someone use a deque?
How about page histories, sharing data between threads, and emulating the tail command ? More on reddit.com
🌐 r/learnpython
4
3
October 7, 2021
python - How to peek front of deque without popping? - Stack Overflow
I want to check a condition against the front of a queue before deciding whether or not to pop. How can I achieve this in python with collections.deque? list(my_deque)[0] seems ugly and poor for More on stackoverflow.com
🌐 stackoverflow.com
🌐
Real Python
realpython.com › python-deque
Python's deque: Implement Efficient Queues and Stacks – Real Python
January 12, 2026 - This data type was specially designed to overcome the efficiency problems of .append() and .pop() in Python lists. A deque is a sequence-like data structure designed as a generalization of stacks and queues.
🌐
Dataquest
dataquest.io › blog › python-deque-queues-stacks
Python Deque Function: A Better Choice for Queues and Stacks – Dataquest
April 7, 2025 - If you use Python, you're probably familiar with lists, and you probably use them a lot, too. They're great data structures with many helpful methods that allow the user to modify the list by adding, removing, and sorting items. However, there are some use cases when a list may look like a great choice, but it just isn't. That is where the deque() function (short for double-ended queue, pronounced like "deck") from the collections module can be a much better choice when you need to implement queues and stacks in Python.
🌐
CodeSignal
codesignal.com › learn › courses › advanced-built-in-data-structures-and-their-usage › lessons › understanding-queues-and-deques-in-python
Understanding Queues and Deques in Python
A deque, or "double-ended queue", allows the addition and removal of items from both ends. Python provides the collections module containing the deque class for implementing deques.
🌐
DEV Community
dev.to › v_it_aly › python-deque-vs-listwh-25i9
Python: deque vs. list - DEV Community
December 10, 2020 - Internally, deque is a representation of a doubly-linked list. Doubly-linked means that it stores at least two more integers (pointers) with each item, which is why such lists take up more memory space. In contrast, lists in Python are implemented with fixed size memory blocks (arrays) and hence, they use less memory space than deques, but lists have to reallocate memory when a new item is inserted (except when appending).
Find elsewhere
Top answer
1 of 4
111

https://github.com/python/cpython/blob/v3.8.1/Modules/_collectionsmodule.c

A dequeobject is composed of a doubly-linked list of block nodes.

So yes, a deque is a (doubly-)linked list as another answer suggests.

Elaborating: What this means is that Python lists are much better for random-access and fixed-length operations, including slicing, while deques are much more useful for pushing and popping things off the ends, with indexing (but not slicing, interestingly) being possible but slower than with lists.

2 of 4
62

Check out collections.deque. From the docs:

Deques support thread-safe, memory efficient appends and pops from either side of the deque with approximately the same O(1) performance in either direction.

Though list objects support similar operations, they are optimized for fast fixed-length operations and incur O(n) memory movement costs for pop(0) and insert(0, v) operations which change both the size and position of the underlying data representation.

Just as it says, using pop(0) or insert(0, v) incur large penalties with list objects. You can't use slice/index operations on a deque, but you can use popleft/appendleft, which are operations deque is optimized for. Here is a simple benchmark to demonstrate this:

import time
from collections import deque

num = 100000

def append(c):
    for i in range(num):
        c.append(i)

def appendleft(c):
    if isinstance(c, deque):
        for i in range(num):
            c.appendleft(i)
    else:
        for i in range(num):
            c.insert(0, i)
def pop(c):
    for i in range(num):
        c.pop()

def popleft(c):
    if isinstance(c, deque):
        for i in range(num):
            c.popleft()
    else:
        for i in range(num):
            c.pop(0)

for container in [deque, list]:
    for operation in [append, appendleft, pop, popleft]:
        c = container(range(num))
        start = time.time()
        operation(c)
        elapsed = time.time() - start
        print "Completed %s/%s in %.2f seconds: %.1f ops/sec" % (container.__name__, operation.__name__, elapsed, num / elapsed)

Results on my machine:

Completed deque/append in 0.02 seconds: 5582877.2 ops/sec
Completed deque/appendleft in 0.02 seconds: 6406549.7 ops/sec
Completed deque/pop in 0.01 seconds: 7146417.7 ops/sec
Completed deque/popleft in 0.01 seconds: 7271174.0 ops/sec
Completed list/append in 0.01 seconds: 6761407.6 ops/sec
Completed list/appendleft in 16.55 seconds: 6042.7 ops/sec
Completed list/pop in 0.02 seconds: 4394057.9 ops/sec
Completed list/popleft in 3.23 seconds: 30983.3 ops/sec
🌐
Codecademy
codecademy.com › docs › python › deque
Python | Deque | Codecademy
April 10, 2025 - A deque is a double-ended queue implementation in Python’s collections module. It provides a versatile data structure that generalizes a stack and a queue by allowing efficient append and pop operations from both ends of the sequence.
🌐
Mathspp
mathspp.com › blog › python-deque-tutorial
Python deque tutorial | mathspp
January 18, 2024 - This tutorial teaches how to work with the Python data structure `collections.deque` and provides 7 example use cases.
🌐
Allendowney
allendowney.github.io › DSIRP › deque.html
Deque — Data Structures and Information Retrieval in Python
Fortunately, there are ways to implement lists that can add and remove elements from both ends in constant time. A collection that has this property is called a double-ended queue, abbreviated “deque” and pronounced like “deck”.
🌐
Python Module of the Week
pymotw.com › 2 › collections › deque.html
Deque - Python Module of the Week
Since deques are a type of sequence container, they support some of the same operations that lists support, such as examining the contents with __getitem__(), determining length, and removing elements from the middle by matching identity. $ python collections_deque.py Deque: deque(['a', 'b', 'c', 'd', 'e', 'f', 'g']) Length: 7 Left end: a Right end: g remove(c): deque(['a', 'b', 'd', 'e', 'f', 'g'])
🌐
Tutorialspoint
tutorialspoint.com › python › python_deque.htm
Python - Deque
A double-ended queue, or deque, has the feature of adding and removing elements from either end. The Deque module is a part of collections library. It has the methods for adding and removing elements which can be invoked directly with arguments.
Top answer
1 of 2
23

A deque is a generalization of stack and a queue (It is short for "double-ended queue").

Thus, the pop() operation still causes it to act like a stack, just as it would have as a list. To make it act like a queue, use the popleft() command. Deques are made to support both behaviors, and this way the pop() function is consistent across data structures. In order to make the deque act like a queue, you must use the functions that correspond to queues. So, replace pop() with popleft() in your second example, and you should see the FIFO behavior that you expect.

Deques also support a max length, which means when you add objects to the deque greater than the maxlength, it will "drop" a number of objects off the opposite end to maintain its max size.

2 of 2
3

I'll add my two cents as I was searching for this exact question but more from the time complexity involved and what should be the preferred choice for a queue implementation in Python.

As per the docs:

Deques support thread-safe, memory efficient appends and pops from either side of the deque with approximately the same O(1) performance in either direction.

This means you can use dequeues as a stack(Last in First out) and queue(First in First out) implementation with pop() or popleft() operation in O(1).

Again from docs

Though list objects support similar operations, they are optimized for fast fixed-length operations and incur O(n) memory movement costs for pop(0) and insert(0, v) operations which change both the size and position of the underlying data representation.

However, using the list as a queue requires popping from the 0th index which will cause data to be shifted resulting in O(N) operation. So if you want to use a queue for a time sensitive operation (production code or competitive programming) always use dequeue for queue implementation.

🌐
DEV Community
dev.to › kathanvakharia › python-s-collections-module-deque-5b7g
Python's Collections Module: deque - DEV Community
June 19, 2021 - Deque, short for Double Ended Queue It is a list-like container with fast appends and pops... Tagged with python, collections, codenewbie, deque.
🌐
Zero To Mastery
zerotomastery.io › blog › python-deque
Beginner’s Guide to Python Deque | Zero To Mastery
November 3, 2025 - deque (short for double-ended queue) changes how Python manages data behind the scenes.
🌐
GeeksforGeeks
geeksforgeeks.org › python › deque-vs-list-in-python
Deque vs List in Python - GeeksforGeeks
July 23, 2025 - Deque is a doubly linked list optimized for fast insertions and deletions at both ends. In Python, a list is a built-in dynamic sized array (automatically grows and shrinks). We can store all types of items (including another list) in a list.
🌐
Reddit
reddit.com › r/learnpython › when would someone use a deque?
r/learnpython on Reddit: When would someone use a deque?
October 7, 2021 -

I want to start by saying I’m fairly experienced with Python and understand the basic data types and algos. I recently learned about deques and while I think the concept is cool, I’m faulting to see when they would be used in the real world. Maybe I’m just blanking here, but can anyone give me some examples of when you’ve used deques?

🌐
Real Python
realpython.com › lessons › deque-for-queues-stacks
Using collections.deque for Queues and Stacks (Video) – Real Python
As you learned earlier, the main difference between a stack and a queue is the way you retrieve elements from each. Let’s use collections.deque to implement both data structures. The queue works by appending elements to one side and removing them…
Published   September 22, 2020
🌐
Note.nkmk.me
note.nkmk.me › home › python
How to Use Deque in Python: collections.deque | note.nkmk.me
April 20, 2025 - In Python, the collections.deque class provides an efficient way to handle data as a queue, stack, or deque (double-ended queue). collections - deque objects — Container datatypes — Python 3.13.3 do ...