我知道Python的dict
在删除项目时会“泄漏”(因为该项目的插槽将被覆盖为神奇的“已删除”值)...但是set
类是否会表现出相同的方式?是否安全地保留一个set
,并随着时间的推移添加和删除内容?
编辑:好的,我尝试了一下,这是我发现的:
>>> import gc >>> gc.collect() 0 >>> nums = range(1000000) >>> gc.collect() 0 ### rsize: 20 megs ### 基准测量 >>> s = set(nums) >>> gc.collect() 0 ### rsize: 36 megs >>> for n in nums: s.remove(n) >>> gc.collect() 0 ### rsize: 36 megs ### 从集合中删除每个项目后,内存使用情况不会降低... >>> s = None >>> gc.collect() 0 ### rsize: 20 megs ### ...但将对集合的引用设置为NULL *确实*释放了内存。 >>> s = set(nums) >>> for n in nums: s.remove(n) >>> for n in nums: s.add(n) >>> gc.collect() 0 ### rsize: 36 megs ### 删除然后重新添加键使用恒定数量的内存... >>> for n in nums: s.remove(n) >>> for n in nums: s.add(n+1000000) >>> gc.collect() 0 ### rsize: 47 megs ### ...但添加新键会使用更多内存。