Python Memory Management 101.Deeping in Garbage collector

Python Memory Management 101.Deeping in Garbage collector

In this talk I will try explain the memory internals of Python and discover how it handles memory management and object creation.
The idea is explain how objects are created and deleted in Python and how garbage collector(gc) functions to automatically release memory when the object taking the space is no longer in use.
I will review the main mechanisms for memory allocation and how the garbage collector works in conjunction with the memory manager for reference counting of the python objects.
Finally, I will comment the best practices for memory management such as writing efficient code in python scripts.

7c4b1ae16723b56facc7a8a8f95aa6ce?s=128

jmortegac

May 09, 2020
Tweet

Transcript

  1. José Manuel Ortega @jmortegac Python Memory Management 101 Deeping in

    Garbage collector
  2. About me • @jmortegac • http://jmortega.github.io • https://www.linkedin.com/in/jmortega1/

  3. Agenda • Introduction to memory management • Garbage collector and

    reference counting with python • Review the gc module for configuring the python garbage collector • Best practices for memory managment
  4. Introduction to memory management • Memory management is the process

    of efficiently allocating, de-allocating, and coordinating memory so that all the different processes run smoothly and can optimally access different system resources.
  5. Python Objects in Memory

  6. Python Memory Manager

  7. Heap allocation

  8. Heap allocation def main(): x=300 print(id(x)) w=fun(x) print(id(w)) def sqr(x):

    print (id(x)) z=x*x print(id(z)) return z if __name__ == "__main__": main()
  9. Python Objects in Memory • Each variable in Python acts

    as an object • Python is a dynamically typed language which means that we do not need to declare types for variables.
  10. Python Objects in Memory

  11. Python Objects in Memory

  12. Python Objects in Memory

  13. Python Objects in Memory

  14. id() method

  15. id() function

  16. id() function

  17. Is Operator

  18. Reference counting • Python manages objects by using reference counting

    • Reference counting works by counting the number of times an object is referenced by other objects in the application. • When references to an object are removed, the reference count for an object is decremented.
  19. Reference counting • A reference is a container object pointing

    at another object. • Reference counting is a simple technique in which objects are allocated when there is reference to them in a program
  20. Reference counting • when reference count increases? ◦ x=1 ◦

    def(x): ◦ list.append(x)
  21. Reference counting

  22. Reference counting

  23. Reference counting

  24. Reference counting • Easy to implement • Objects are immediately

    deleted when reference counter is 0 ✗ Not thread-safe ✗ Doesn’t detect cyclic references ✗ space overhead - reference count is stored for every object
  25. Python Garbage collector • The Python Garbage Collector (GC) runs

    during the program execution and is triggered if the reference count reduces to zero.
  26. Garbage collector(GC) module

  27. Python Garbage collector • Reference Counting + Generational GC •

    RefCount reaches zero, immediate deletion • Deleted objects with cyclic references are deleted with Tracing GC
  28. Garbage collector(GC) reference cycle

  29. Garbage collector(GC) reference cycle >>> def ref_cycle(): ... list =

    [1, 2, 3, 4] ... list.append(list) ... return list
  30. Garbage collector(GC) reference cycle import gc for i in range(8):

    ref_cycle() n = gc.collect() print("Number of unreachable objects collected by GC:", n) print("Uncollectable garbage:", gc.garbage) print("Number of unreachable objects collected by GC:", gc.collect())
  31. Garbage collector(GC) reference cycle

  32. Python Object Graphs https://mg.pov.lt/objgraph/ >>> x = [] >>> list

    = [x, [x], dict(x=x)] >>> import objgraph >>> objgraph.show_refs([y], filename='sample-graph.png')
  33. Best practices for memory managment • Using gc.collect() carefully print("Collecting...")

    n = gc.collect() print("Number of unreachable objects collected:", n) print("Uncollectable garbage:", gc.garbage)
  34. Best practices for memory managment • Using with context manager

    for working with files with open('data.txt', 'r') as file: data = ','.join(line.strip() for line in file)
  35. Best practices for memory managment • Avoid List Slicing with

    [:] list= [1,2,3,4] list[1:3] list[slice(1,3)]
  36. Best practices for memory managment • String Concatenation string= “hello”

    string+= “world” wordList = ("hello", "world") string = " ".join(wordList)
  37. Best practices for memory managment • Use Iterators and Generators

  38. References • https://stackabuse.com/basics-of-memory-management-in-p ython/ • https://realpython.com/python-memory-management • https://rushter.com/blog/python-garbage-collector • https://pythonchb.github.io/PythonTopics/weak_references.

    html
  39. https://www.youtube.com/c/JoseManuelOrtegadev

  40. https://speakerdeck.com/jmortega