Я не использую Pycharm.Но я думаю, что знаю почему.
Когда вы запускаете с консоли Python, он должен иметь from your-source-file import *
в фоновом режиме.
Когда вы перепривязываете a
к новому объекту в консоли, функция будетпо-прежнему используйте the a
в вашем исходном файле, а не the a
в консоли.
Вы можете явно попробовать from your-source-file import *
и предпринять остальные действия, чтобы проверить это.Я сам проверил это на своем компьютере.
Если вы хотите понять, почему, вы можете прочитать 4.Модель выполнения: разрешение имен - документация Python 3.7.3 , и убедитесь, что вы понимаете это:
Когда имя используется в блоке кода, оно разрешается с использованием ближайшегообъем ограждения.Набор всех таких областей видимости для блока кода называется средой блока.
Моя попытка в ipython:
In [2]: from test import *
In [3]: func()
[1. 1.]
[1. 1.]
[1. 1.]
[1. 1.]
In [4]: a = np.zeros(shape=(4, 2))
In [5]: func()
[1. 1.]
[1. 1.]
[1. 1.]
[1. 1.]
In [6]: def func():
...: for i in a:
...: print(i)
...:
In [7]: func()
[0. 0.]
[0. 0.]
[0. 0.]
[0. 0.]
и
In [1]: from auto_audit_backend.test_np import *
In [2]: func()
[1. 1.]
[1. 1.]
[1. 1.]
[1. 1.]
In [3]: a[0][0] = 666
In [4]: func()
[666. 1.]
[1. 1.]
[1. 1.]
[1. 1.]
In [5]: a = np.zeros(shape=(4, 2))
In [6]: func()
[666. 1.]
[1. 1.]
[1. 1.]
[1. 1.]
с вашим кодом в файле test.py.