Currently LabelIndex in Python uses a [self._labels[i].location for i in self._indices] for creating the locations sequence.
This has the effect of creating a new list the same length for each label index upon the first function call that uses the locations. Should test the performance implications and whether there's value in using a functional Sequence class implementation i.e.
def __getitem__(self, i):
if isinstance(i, slice):
return [map(lambda x: self._labels[x].location, self._indices[i])]
return self._labels[self._indices[i]].location