아이템이 제거 될 때 파이썬 dict
이 "누출"한다는 것을 안다. (아이템의 슬롯은 마법의 "제거 된"값으로 덮어 쓰기 때문에) ... 그러나 set
클래스는 같은 방식으로 동작 할까? set
을 계속 지키고 시간이 지남에 따라 물건을 추가하고 제거하는 것이 안전합니까?Python : dict와 같이 항목이 제거되면 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.
파이썬의 dicts가 "누설 될"것이라고 말하면 무슨 뜻인지 실연 해 주시겠습니까? 다른 출처에 대한 참조일까요? –
AFAIK dicts는 실제로 새어 나가지 않습니다 - 때때로 (예를 들어 새 항목을 설정할 때) 제거 된 값을 대체하는 더미가 제거됩니다 –