Learn how to improve the memory usage on your raspberry pi, from linuxuser:
Last month, we started with a quick look at Python objects, including an introduction to creating your own. One thing that we only saw in passing was just how ubiquitous objects are in Python. Pretty much everything in Python is an object. If you have gigabytes of memory, how these objects get stored is not a major issue. On a Raspberry Pi, however, you are limited. This month, we will look at how Python stores and references objects. We will also look at some code that you can use to interrogate your own code to see what is happening with RAM usage.
The first thing to realise is that everything in Python is an object, of one type or another. You can find out the type of an object with the command type(). If you were to create a list of integers with the command a=[1,2,3], running the command type(a) would return that list. But it goes even further than that. What happens if you run the command type(1)? Does the integer 1 have a type? In this case, you will get the result ‘integer’. This makes sense. But it goes even further. The integer 1 is actually an object. Integer objects have a function named bit_length(), which gives the number of digits needed to represent this integer in binary. If you have num1=1, you can find the bit length with num1.bit_length(). But the interesting thing is that, since the integer 1 is an object, you can also execute (1).bit_length(). This is very different behaviour from most other programming languages.