В этом нет ничего странного. Ваша проблема в том, что это утверждение:
Глобальная строка, заданная внутри функции, кажется невидимой для моей функции atexit, тогда как глобальные списки в порядке.
- ложь , Вы не устанавливаете глобальную строку внутри функции. Вместо этого вы создаете его локальную версию внутри области действия функции, которая скрывает глобальную. Если вы действительно хотите изменить глобальное значение, вы должны сделать следующее:
def setString1(newString):
global myString1
myString1 = newString
Причина, по которой он работает для ваших списков, заключается в том, что вы изменяете их на месте (через append
) вместо создания копировать. Если бы вместо этого вы сделали
def setArray1(newString):
myArray1 = myArray1 + [newString]
, вы бы увидели то же поведение, что и в строковом регистре.
Предупреждение: изменение глобального состояния из функций часто считается плохим стилем, так как он запутывает, где установлены значения. Обычно лучше изменить значения в глобальной области видимости, например, присваивая результат вызова функции.