def __init__(self, maxlen, **kwargs):
     # ARC has two caches: a recency cache and a frequency cache
     self._recency_cache_top = LinkedSet()  # paper: T_1
     self._recency_cache_bottom = LinkedSet()  # paper: B_1
     self._frequency_cache_top = LinkedSet()  # paper: T_2
     self._frequency_cache_bottom = LinkedSet()  # paper: B_2
     self._maxlen = int(maxlen)  # paper: c
     if self._maxlen <= 0:
         raise ValueError('maxlen must be positive')
     # _p is the target number of elements for the recency cache top
     # which means that _maxlen - _p is the target number of elements for the frequency cache top
     # It is the target number since it will be a real number at some point and not a natural number.
     self._p = 0