.. include:: global.rst ================================ Memory Management in Python ================================ Overview ======== Python uses an automatic memory management system that handles allocation and deallocation of memory without direct programmer intervention. Key Components ============== 1. Private Heap --------------- - All Python objects and data structures are stored in a private heap. - The Python memory manager controls this heap. - Users do not have direct access to manage this memory. 2. Memory Allocator -------------------- - Responsible for allocating memory for objects. - Python uses a specialized allocator (PyMalloc) for small objects. - Larger objects may use the system's standard allocator. 3. Reference Counting ---------------------- - Each object maintains a reference count. - When a reference is created, count increases. - When a reference is deleted, count decreases. - When count reaches zero, memory is immediately deallocated. Example: a = [] b = a # reference count increases del a # reference count decreases 4. Garbage Collection (GC) --------------------------- - Handles cyclic references (objects referencing each other). - Python uses a generational garbage collector: - Generation 0: New objects - Generation 1: Intermediate - Generation 2: Long-lived objects - Periodically scans for unreachable objects and frees memory. 5. Object-Specific Allocation ------------------------------ - Python uses object-specific memory pools for efficiency. - Small objects (e.g., integers, strings) are reused when possible. 6. Memory Pools and Arenas -------------------------- - Memory is managed in layers: - Arenas (large blocks of memory) - Pools (subdivisions of arenas) - Blocks (individual object storage) - Improves performance and reduces fragmentation. Best Practices ============== - Avoid circular references when possible. - Use built-in data structures efficiently. - Delete unused variables using ``del``. - Use context managers (``with`` statement) for resource management. - Monitor memory usage with tools like ``tracemalloc``. Common Issues ============= - Memory leaks (often due to lingering references) - Excessive object creation - Large data structures held longer than needed Useful Modules ============== - ``gc``: Control garbage collection - ``sys``: Access reference counts (``sys.getrefcount()``) - ``tracemalloc``: Track memory allocation Summary ======= Python simplifies memory management using: - Automatic allocation - Reference counting - Garbage collection This allows developers to focus on application logic rather than memory handling.