возникает проблема с изменением исходного аргумента. Я могу попытаться помочь вам с этим.
Возможно, проблема в том, что вы используете методы ledger.condense() и ledger.deepcopy(), которые не создают полную копию объекта ledger, а только поверхностную. Это означает, что если в объекте ledger есть ссылки на другие объекты, то они будут скопированы как ссылки, а не как новые объекты. Таким образом, при изменении ledger внутри функции chain вы также изменяете исходный аргумент ledger0.
Чтобы решить эту проблему, вам нужно использовать функцию copy.deepcopy из модуля copy, которая создает полную копию объекта ledger, включая все его вложенные объекты. Это позволит вам избежать нежелательных побочных эффектов и сохранить исходный аргумент ledger0 неизменным. Для этого вам нужно импортировать модуль copy и заменить строку
_ledger = ledger.condense() # .deep_copy()
на
_ledger = copy.deepcopy(ledger)
код после замены строки и получил следующий результат: