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