Поведение глобальных переменных
Данный код не изменит глобальные значения переменных x и y:
def abc(x, y):
x = x + [4]
y += 'nnn'
return print(x, y)
x = [1, 2, 3]
y = 'abc'
abc(x, y)
print(x, y)
вывод программы:
[1, 2, 3, 4] abcnnn
[1, 2, 3] abc
Но если изменить оператор в выражении x = x + [4]
на x += [4]
, то список изменится для глобального имени x.
Вывод будет:
[1, 2, 3, 4] abcnnn
[1, 2, 3, 4] abc
Почему так происходит? То есть неизменяемая последовательность не изменилась, а изменяемый список все же изменился без использования слова global
в области функции. Я понимаю, что такие вещи как x.append()
поменяли бы глобальный x, но речь вроде идет о присваивании. А точнее о виде присваивания, что такого в операторе +=, что он позволяет менять глобальный x ?