Отправка ответа на тот случай, если кому-то понадобится больше информации, чем hpaulj и Willem Van Onsem быстрых и хороших ответов.
Полагаю, мы уже понимаем, как изменяемые / неизменяемые объекты работают. Если нет, то здесь у нас есть ответ об этом в по ссылке против присвоения context.
Проблема, с которой я столкнулся, была связана с тем, что isub является оператором на месте, и он использовался с изменяемым объектом, поэтому исходная переменная, переданная присваиванием функции test
, изменила свой объект, не имея ничего общего с глобальными переменными, как я предполагал.
Обратите внимание, что, как мы могли видеть, не потому, что у вас есть изменяемый объект, все операции будут изменять объект на месте. Пример с id
:
arr = np.array([1,2,3])
print(id(arr)) # prints 139838225358560
arr += 3
print(arr) # prints [4 5 6]
print(id(arr)) # prints 139838225358560
arr = arr + 3
print(arr) # prints [7 8 9]
print(id(arr)) # prints 139838016018832
Оператор на месте +=
выполняет изменение объекта arr
, в то время как присвоение =
создает новый. То же самое касается моего вопроса с apocalypse -= 3
и apocalypse = apocalypse - 3
соответственно.
Python документация содержит краткое и хорошее объяснение операторов на месте со списком их.