都是线性结构,支持下表访问
list是可变对象,tuple保存的是引用不可变(tuple中保存的list这里面的list可变)。
list没法作为字典的key,tuple可以(可变对象不可hash)
什么是LRUCache
Least-Recently-Used替换掉最近最少使用的对象
缓存剔除策略,当缓存空间不够用的时候需要一种方式剔除key
常见的有LRU,LFU等
LRU通过使用一个循环双端队列不断把最新访问的key当道表头实现
如何实现LRUCache
字典用来缓存,循环双端链表用来记录访问顺序
利用Python内置的dict + collections.OrderedDict实现
dict用来当作k/v键值对的缓存
OrderedDict用来实现更新最近访问的key
其中capacity表示容量
popitem(item=False)表示删除第一个
class LRUCache:
def __init__(self,capacity=128):
self.od = OrderedDict()
self.capacity=capacity
def get(self,key):
if key in self.od:
val = self.od[key]
self.od.move_to_end(key)
return val
else:
return -1
def put(self,key,value):
if key in self.od:
del self.od[key]
self.od[key] = value
else:
self.od[key] = value
if len(self.od) > self.capacity:
self.od.popitem(last=False)