class _Base: def __init__(self, iterable): self._list = list(iterable) def __len__(self): return len(self._list) def __getitem__(self, index): return self._list[index] class Classic(_Base): pass class New(_Base, object): pass for l in range(2, 5): for cls in (New, Classic): a = cls(range(l)) print 'a = %s(%s)' % (cls.__name__, a[:]) for val in range(1, l): stmt = 'a[-%s:]' % (l + val) print '\t', stmt, '=', eval(stmt) print ## Output # #a = New([0, 1]) # a[-3:] = [0, 1] #a = Classic([0, 1]) # a[-3:] = [1] # #a = New([0, 1, 2]) # a[-4:] = [0, 1, 2] # a[-5:] = [0, 1, 2] #a = Classic([0, 1, 2]) # a[-4:] = [2] # a[-5:] = [1, 2] # #a = New([0, 1, 2, 3]) # a[-5:] = [0, 1, 2, 3] # a[-6:] = [0, 1, 2, 3] # a[-7:] = [0, 1, 2, 3] #a = Classic([0, 1, 2, 3]) # a[-5:] = [3] # a[-6:] = [2, 3] # a[-7:] = [1, 2, 3]