Есть аналогия с файловой системой. Это не идеальная аналогия, но помогает быстро понять проблему.
Модули похожи на каталоги, содержащие файлы, и эти файлы представляют переменные и другие объекты. В модулях вы используете относительные пути. Просто запишите абсолютные пути, и картина станет ясной.
Ваша отправная точка:
/my_app/module1/
/my_app/module1/a_variable
/my_app/module2/
A. Если вы сделаете это в module2:
import a_variable from module1
Вы делаете копию переменной a_variable
:
/my_app/module1/
/my_app/module1/a_variable
/my_app/module2/
/my_app/module2/a_variable
В этом случае, когда переменные не являются изменяемыми, они не синхронизируются при первой модификации.
B. Но когда вы делаете это вместо:
import module1
Вы создаете копию пути, ведущего к переменной: module1.a_variable
/my_app/module1/
/my_app/module1/a_variable
/my_app/module2/
/my_app/module2/module1 -> ../module1
Результат - одна и та же переменная в обоих модулях.