(self, data=None)
| 246 | |
| 247 | class WeakSet(object): |
| 248 | def __init__(self, data=None): |
| 249 | self.data = set() |
| 250 | |
| 251 | def _remove(item, selfref=ref(self)): |
| 252 | self = selfref() |
| 253 | if self is not None: |
| 254 | if self._iterating: |
| 255 | self._pending_removals.append(item) |
| 256 | else: |
| 257 | self.data.discard(item) |
| 258 | |
| 259 | self._remove = _remove |
| 260 | # A list of keys to be removed |
| 261 | self._pending_removals = [] |
| 262 | self._iterating = set() |
| 263 | if data is not None: |
| 264 | self.update(data) |
| 265 | |
| 266 | def _commit_removals(self): |
| 267 | l = self._pending_removals |