Two Sequences, One Difference List: What Counts as One Change
6 min read · Updated October 30, 2026
A difference list between a reference and a clone looks like a list of independent facts, and it is not. Adjacent substitutions interact, a deletion whose length is a multiple of three leaves the reading frame intact, and the identity percentage at the top is computed over the alignment rather than over the thing you care about.
Here is a 60 bp coding sequence compared against a clone carrying three changes, and what each line of the output does and does not say.
The worked example
The reference is twenty codons: ATG GCT AGC AAA GGT GAA GAA CTG TTT ACC GGC GTT GTT CCG ATT CTG GTT GAA CTG GAT, which translates to MASKGEELFTGVVPILVELD.
The clone carries three edits: codon 4 AAA to AAG, codon 8 CTG to TCT, and codon 15 ATT deleted entirely. Compared as coding sequence from position 1, the output is 88.33% identity over a 60-column alignment, with five variants in it — four substitutions and one deletion.
- g.12A>G — synonymous (Lys4=). The codon changed and the amino acid did not.
- g.22C>T, g.23T>C, g.24G>T — three rows, one amino acid: CTG to TCT, Leu8Ser.
- g.43_45del — three bases gone, removing Ile15 and leaving the rest of the protein in frame.
Five variants, three mutations
The count at the top of a difference list is a count of positions that differ, not of events. The three substitutions at positions 22, 23 and 24 are one codon rewritten, and reading them as three independent point mutations would describe a clone that does not exist: each substitution alone would give a different amino acid from the one the clone actually carries.
This is why each of those rows names the same consequence, Leu8Ser, and says it is read together with the other changes in the codon. A row-by-row reading that stops at the first substitution gets the protein wrong.
A deletion in frame is not a deletion you can ignore
Removing three bases keeps every downstream codon where it was, so the translation stays readable: MASKGEELFTGVVPILVELD becomes MASKGEESFTGVVPLVELD, twenty residues down to nineteen. The protein is one residue shorter and otherwise intact.
That is a different outcome from a one- or two-base deletion, which shifts the frame and usually produces a stop within a few dozen codons. It is not the same as harmless: an in-frame deletion inside a domain, a binding site or a catalytic residue is a loss-of-function mutation that reads as a clean sequence.
What the identity percentage is measured over
88.33% here is 53 matching columns out of a 60-column alignment, counting each of the three deleted bases as a mismatch. Change the deletion's length and the percentage moves even though the number of mutational events does not — a 30 bp in-frame deletion in the same sequence would read 50% identity and still be one event.
Identity is a useful summary for a clone that should be perfect, where anything below 100% is the finding. It is a poor summary for deciding how damaged a sequence is, and the variant table is what that question is answered from.
Why the reading frame has to be declared
Nothing in a bare sequence says where translation starts. A comparison run without a frame reports the same five differences and no consequences at all, because synonymous, missense and nonsense are statements about codons rather than about bases.
Declare the frame and the same difference list gains the column that decides whether a clone is usable. Declare the wrong frame and every consequence in it is wrong while every coordinate stays right, which is the failure mode worth watching for: check that the translated reference is the protein you expect before believing anything in the effect column.
Frequently asked questions
Why does one amino-acid change show up as three rows?
Because the rows are positions, not events. Three substitutions inside one codon are three differing bases and one changed residue. Each row names the same consequence and says it is read together with the others in that codon, so the protein is only wrong if you read the rows independently.
Is an in-frame deletion harmless?
No. It keeps the reading frame, so the protein stays full length minus the deleted residues, which is why it does not look dramatic in a translation. Whether it matters depends on what was deleted: three bases out of a flexible loop and three bases out of an active site read identically in a difference list.
Why is my clone 99% identical but still wrong?
Identity is measured over the alignment and treats every position equally. One substitution that introduces a stop codon, or a single-base deletion that shifts the frame, costs almost nothing in percentage terms and costs you the construct. Read the consequence column rather than the percentage.
Does the comparison tell me which sequence is the mutant?
No. It reports differences of the query relative to the reference you nominated; swap them and you get the mirror image of the same list. Which one is the mutant is something you know and the alignment does not.
Related references
Related tools
Align a query to a reference and list substitutions, insertions and deletions with effects.
Align two sequences with Needleman-Wunsch or Smith-Waterman.
Inspect chromatograms, compare a read with its reference, or screen a whole plate of clones.
Translate a nucleotide sequence to protein in all six reading frames at once.
Paste what you got back and the PCR you say made the insert. It re-derives the insert, finds it in either orientation, and gives you the exact mismatch positions.