Python 如何将对象分配给一个模块中的变量,然后从另一个模块访问它?

Python 如何将对象分配给一个模块中的变量,然后从另一个模块访问它?,python,Python,我有两个模块。模块1是主程序,模块2是实用程序代码。实用程序代码需要访问模块1中的列表。但是在调用模块2之前,模块1需要选择两个列表中的哪一个是可操作的。问题是module2似乎无法访问module1变量的当前值。示例代码: # module1.py #!python import module2 list1 = [1,2,3] list2 = [4,5,6] chosen_list = [] def main(): print('here') global c

我有两个模块。模块1是主程序,模块2是实用程序代码。实用程序代码需要访问模块1中的列表。但是在调用模块2之前,模块1需要选择两个列表中的哪一个是可操作的。问题是module2似乎无法访问module1变量的当前值。示例代码:

# module1.py
#!python

import module2

list1 = [1,2,3]
list2 = [4,5,6]

chosen_list = []

def main():
    print('here')
    
    global chosen_list

    chosen_list = list2
    
    module2.do_func()

if __name__ == '__main__':
    main()


# module2.py
#!python

import module1

def do_func():
    print(module1.chosen_list[2])
这会产生错误:Indexer错误:列表索引超出范围

如果我没有将所选列表分配给模块作用域中的任何对象,我会得到AttributeError:模块“module1”没有属性“所选列表”

如果我将所选的_列表分配给模块范围内的列表1,我将从模块2中获得列表1的值,而不是列表2的值

那么,作为main()中操作的结果,如何将选中的_list设置为module2中的list2呢


请注意,这个问题不是的重复,因为其中的答案只是正确地引用modulename.variablename。我的问题是关于变量的值,而不是范围和名称。有人告诉我要问另一个问题,这个问题很蹩脚,但我不确定。

我怀疑(但我不确定)这种情况会发生,因为当module1作为主程序执行时,它不是被称为
module1
,而是
\u main\uuuuuuu
,因此module2中的
import module1
有效地再次导入了它。请参见此处的“两次导入主模块:。请勿执行此操作。导入的模块不应导入导入程序。它被称为循环导入。重构您的代码,以便通过让主模块导入并调用一些传递所需数据的实用程序函数,为实用程序模块提供它所需的数据。