Это происходит потому, что вы используете неизменяемые значения (целочисленные значения и значения None), а импорт переменных аналогичен передаче данных по значению, а не передаче по ссылке.
Если вы сделали global_mod.x списком и манипулировали его первым элементом, он работал бы так, как вы ожидаете.
Когда вы делаете from global_mod import x
, вы создаете имя x
в вашем модуле с тем же значением, которое x
имеет в global_mod
. Для таких вещей, как функции и классы, это работает так, как вы ожидаете, потому что люди (как правило) не назначают эти имена позже.
Как указывает Алекс, если вы используете import global_mod
, а затем global_mod.x
, вы избежите этой проблемы. Имя, которое вы определяете в своем модуле, будет global_mod
, которое всегда относится к нужному модулю, а затем, используя атрибут доступа для получения значения x
, вы получите самое последнее значение x
.