Я знаю, что Python dict
s будет "протекать" при удалении элементов (потому что слот элемента будет перезаписан магическим значением "удалено") ... Но будет ли класс set
вести себя так же? Безопасно ли хранить set
рядом, добавлять и удалять из него вещи со временем?
Редактировать : Хорошо, я попробовал, и вот что я нашел:
>>> import gc
>>> gc.collect()
0
>>> nums = range(1000000)
>>> gc.collect()
0
### rsize: 20 megs
### A baseline measurement
>>> s = set(nums)
>>> gc.collect()
0
### rsize: 36 megs
>>> for n in nums: s.remove(n)
>>> gc.collect()
0
### rsize: 36 megs
### Memory usage doesn't drop after removing every item from the set…
>>> s = None
>>> gc.collect()
0
### rsize: 20 megs
### … but nulling the reference to the set *does* free the memory.
>>> s = set(nums)
>>> for n in nums: s.remove(n)
>>> for n in nums: s.add(n)
>>> gc.collect()
0
### rsize: 36 megs
### Removing then re-adding keys uses a constant amount of memory…
>>> for n in nums: s.remove(n)
>>> for n in nums: s.add(n+1000000)
>>> gc.collect()
0
### rsize: 47 megs
### … but adding new keys uses more memory.