If I have a list containing items, how can I empty or delete all the contents of the list?
Answer
There are two ways to empty an existing list. The first way is to just assign the list variable to an empty list. In this case, the old list and its contents are automatically deleted by Python. This is shown in the following code example.
list1 = [ 1, 2, 3, 4, 5, 6, 7 ]
list1 = []
The second method is to use the del() function to delete all the elements of the list. This forces the removal of all the items immediately instead of letting Python delete the contents at some time of its choosing. Both methods produce the same end result which is that the list will be empty of contents.
In the second example above it is important to include the slice subscript, else the variable itself will be deleted.
>>> list2 = [ 10, 20, 30, 40, 50, 60, 70 ]
>>> del list2[:]
>>> list2
[]
>>> isinstance(list2, list)
True
>>> list2 = [ 10, 20, 30, 40, 50, 60, 70 ]
>>> del list2
>>> isinstance(list2, list)
Traceback (most recent call last):
File "<pyshell#58>", line 1, in <module>
isinstance(list2, list)
NameError: name 'list2' is not defined
>>>
Clearly, the first example is the preferred approach, assign an empty list, since it is not likely to ever throw a wrench into the proceedings (a bug that could be tricky to find).
Have you explored the docs.python.org material, yet, just from a familiarization perspective. It is a good first step. Take the time to look things over then come back and start learning how to put the pieces together. It’s not a novel; just focus on the parts your are most concerned with at the time.
The first entry has list1 referencing a list. That reference remains intact until the variable is given a new reference, the empty list. It no longer references the populated list, which if no other references exist will be garbage collected and the memory re-allocated.
It appears as though the second assignment has just emptied the list, but that is not so. If we check the ID of each reference we will see they are not the same object.
Notice that as long we operate on the contents of the list, the ID remains the same, even when the list is emptied (but not replaced).
Now lets see what happens when we replace the list.
>>> list1 = []
>>> id(list1)
48829504
>>>
It now references a completely new object. As mentioned, if no other references exist within the program to the original object, the earlier ID will no longer exist.
It still comes down to why we would need to clear a list. The rest is moot. It has nothing to do with what is shorter or faster, but what works in a dynamic environment and is also readable.
Different scenarios crop up all the time where we may need to clear a list while keeping it declared. Not being a real world programmer it is difficult to dream up such scenarios. This is merely an example of the various ways we can clear a list.