Что определяется в переменной stack в Python3 в случае такой записи stack = [(src, [src])]?
Просто набор список и кортежей вложенных друг в друга
[ # список
    ( # Кортеж
        [ # список
        src # какой-то объект
        ,
        ( # Кортеж
             [src] # список с объектом
        )
    )
]
Вам поможет встроенная функция type(). Она описывает тип передаваемого объекта.

Посмотрите, что выводит type(stack). Потом можно удалять уже понятные части, чтобы смотреть что там внутри.