Поведение хорошо указано в документации, поэтому вам не нужно читать исходный код, чтобы понять его (но посмотрите мои комментарии в конце этого ответа):
Объекты последовательности могут сравниваться с другими объектами с таким же типом последовательности. Для сравнения используется лексикографический порядок: сначала сравниваются первые два элемента, и, если они различаются, это определяет результат сравнения;если они равны, сравниваются следующие два элемента и т. д., пока не будет исчерпана любая последовательность. Если два элемента для сравнения сами являются последовательностями одного типа, лексикографическое сравнение выполняется рекурсивно. Если все элементы двух последовательностей сравниваются равными, последовательности считаются равными. Если одна последовательность является начальной подпоследовательностью другой, более короткая последовательность является меньшей (меньшей).
https://docs.python.org/3/tutorial/datastructures.html#comparing-sequences-and-other-types
Стоит отметить, что Python 3 нетбольше позволяет сравнивать произвольные пары объектов (что было в Python 2). Это можно проиллюстрировать, слегка изменив свой пример:
>>> L1 = ['1', ['123', '456']]
>>> L2 = ['1', '2', '3']
>>> print(L1 > L2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unorderable types: list() > str()
Но, прочитав все это, вы все равно хотите прочитать исходный код CPython, он доступен по адресу https://github.com/python/cpython
Inв частности, код сравнения списка можно найти по адресу https://github.com/python/cpython/blob/master/Objects/listobject.c#L2634