В функции change
сначала вы используете elements
из внешней области, которая была передана в качестве аргумента и ссылается - может быть изменена внутри функции, а те, которые были изменены, будут влиять на объект даже вне локальной области.
Затем вы создаете локальный экземпляр elements
, модифицируете его и завершаете функцию. Поскольку elements
в глобальной области действия были изменены ранее, вы видите «неожиданный» результат.
Проверьте https://docs.python.org/3/reference/executionmodel.html для более подробной информации.