Skip to content

dis Module

The dis module provides tools to disassemble Python bytecode. It shows the low-level instructions that Python code compiles to.

Complexity Reference

Operation Time Space Notes
dis.dis() O(n) O(n) n = bytecode instructions
dis.get_instructions() O(n) O(n) Iterate bytecode
Bytecode analysis O(n) O(1) Single pass
dis.Bytecode() O(1) O(1) Create Bytecode wrapper
dis.code_info() O(n) O(n) Format code object metadata
dis.show_code() O(n) O(n) Print code metadata
dis.stack_effect() O(1) O(1) Stack effect for opcode
dis.findlinestarts() O(n) O(n) Map bytecode to lines
dis.findlabels() O(n) O(n) Find jump targets
dis.pretty_flags() O(n) O(n) Format compiler flags
dis.get_executor() O(1) O(1) Return current executor
dis.print_instructions() O(n) O(n) Print Instruction list
dis.disassemble() O(n) O(n) Disassemble code object
dis.disco() / dis.distb() O(n) O(n) Disassemble object/traceback
dis.main() O(n) O(n) CLI entrypoint
Instruction / Positions O(1) O(1) Named tuple types

Disassembling Functions

Basic Disassembly

import dis

def add(x, y):
    return x + y

# Disassemble function - O(n)
dis.dis(add)

# Output:
#   2           0 LOAD_FAST                0 (x)
#               2 LOAD_FAST                1 (y)
#               4 BINARY_ADD
#               6 RETURN_VALUE

Analyzing Bytecode Instructions

import dis

def factorial(n):
    if n <= 1:
        return 1
    return n * factorial(n - 1)

# Get instructions - O(n)
for instr in dis.get_instructions(factorial):
    print(f"{instr.opname:15} {instr.argval}")

# Output shows: LOAD_FAST, LOAD_CONST, COMPARE_OP, etc.

Performance Analysis

Compare Function Implementations

import dis

def loop_append(n):
    result = []
    for i in range(n):
        result.append(i)
    return result

def list_comp(n):
    return [i for i in range(n)]

print("Loop with append:")
dis.dis(loop_append)

print("\nList comprehension:")
dis.dis(list_comp)
# List comprehension has fewer instructions