我知道Python dict
将在物品被移除时“泄漏”(因为物品的插槽将被魔术“已删除”的值所覆盖)...但set
类的行为方式是否相同?保留一个set
是否安全,随着时间的推移添加和删除它的东西?Python:当物品被移除时,集合类是否“泄漏”,如字典?
编辑:好吧,我已经尝试过了,这里是我的发现:
>>> 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.
当你说Python字典会“泄漏”时,你能证实你的意思吗?也许是对其他来源的引用? – 2010-02-28 04:13:40
AFAIK字典不会真正泄漏 - 例如(当你设置新的项目时)替换删除值的假人是purget – 2010-02-28 04:15:46