'Like from_packets but in case the size and number of the packets
is the same as in the given pages the layout of the pages will
be copied (the page size and number will match).
If the packets don\'t match this behaves like::
OggPage.from_packets(packets, sequence=old_pages[0].sequence)'

@classmethod
def _from_packets_try_preserve(cls, packets, old_pages):

    old_packets = cls.to_packets(old_pages)
    if ([len(p) for p in packets] != [len(p) for p in old_packets]):
        return cls.from_packets(packets, old_pages[0].sequence)
    new_data = ''.join(packets)
    new_pages = []
    for old in old_pages:
        new = OggPage()
        new.sequence = old.sequence
        new.complete = old.complete
        new.continued = old.continued
        new.position = old.position
        for p in old.packets:
            (data, new_data) = (new_data[:len(p)], new_data[len(p):])
            new.packets.append(data)
        new_pages.append(new)
    assert (not new_data)
    return new_pages
