一致するブロックと見なされるものを確認できます。
>>> difflib.SequenceMatcher(isjunk=lambda x: x == " ", a="a b c", b="a bc").get_matching_blocks()
[Match(a=0, b=0, size=3), Match(a=4, b=3, size=1), Match(a=5, b=4, size=0)]
最初の 2 つは、"a b" が "a b" に、"c" が "c" に一致することを示しています。(最後のは些細なことです)
問題は、「a b」が一致する理由です。コードでこれに対する答えを見つけました。最初に、アルゴリズムは find_longest_match を繰り返し呼び出して、一致するブロックの束を見つけます。find_longest_match の注目すべき点は、ジャンク文字が文字列の末尾に存在することを許可することです。
If isjunk is defined, first the longest matching block is
determined as above, but with the additional restriction that no
junk element appears in the block. Then that block is extended as
far as possible by matching (only) junk elements on both sides. So
the resulting block never matches on junk except as identical junk
happens to be adjacent to an "interesting" match.
これは、最初に "a" と "b" が一致すると見なすことを意味します ("a" の末尾と "b" の先頭にあるスペース文字を許可します)。
次に、興味深い部分です。コードは、ブロックのいずれかが隣接しているかどうかを確認するために最後のチェックを行い、隣接している場合はそれらをマージします。コード内の次のコメントを参照してください。
# It's possible that we have adjacent equal blocks in the
# matching_blocks list now. Starting with 2.5, this code was added
# to collapse them.
つまり、基本的には「a」と「b」を一致させてから、これら2つのブロックを「a b」にマージし、スペース文字がジャンクであるにもかかわらず、それを一致と呼びます。