123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- from heapq import heappush, heapify, heapreplace, heappop
- class LRUCache(dict):
- def __init__(self, capacity):
- super(LRUCache, self).__init__()
- self._lru = []
- self._capacity = capacity
- def __setitem__(self, key, value):
- try:
- self._lru.remove(key)
- except ValueError:
- pass
- self._lru.append(key)
- while len(self._lru) > self._capacity:
- del self[self._lru[0]]
- return super(LRUCache, self).__setitem__(key, value)
- def __getitem__(self, key):
- try:
- self._lru.remove(key)
- self._lru.append(key)
- except ValueError:
- pass
- return super(LRUCache, self).__getitem__(key)
- def __delitem__(self, key):
- try:
- self._lru.remove(key)
- except ValueError:
- pass
- return super(LRUCache, self).__delitem__(key)
- def pop(self, key, default=None):
- try:
- self._lru.remove(key)
- except ValueError:
- pass
- return super(LRUCache, self).pop(key, default)
- def _not_implemented(self, *args, **kw):
- raise NotImplementedError
- popitem = setdefault = update = _not_implemented
|