Python:当删除项目时,set类是否会"泄漏",就像dict一样?

Dav*_*ver 4 python dictionary set

我知道Python dict会在删除项目时"泄漏"(因为项目的插槽将被魔法"删除"值覆盖)......但是这个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.

Ale*_*lli 7

是的,set基本上就是一个哈希表dict- 界面上的差异并不意味着"低于"它的许多差异.有一段时间,你应该复制一套 - myset = set(myset)就像你应该为一个dict一样,随着时间的推移定期进行许多添加和删除.

  • 调用此行为"泄漏"过度简化和误导,但重点是,偶尔为高流失的字典或集合制作一个新的副本可以节省内存*和*加快速度! (2认同)