Python重复导入模块是否会产生内存重复引用?多实例类场景答疑
模块变量内存存储问题解答
结论先行
- Python里的模块是单例加载的:不管被导入多少次、被多少个类实例引用,整个模块只会在内存中加载一次。所以创建多个
MyClass实例时,my_module.x、my_module.y这些变量只会有一份内存存储,绝不会出现3个独立内存位置的情况。
为什么会这样?
当my_class.py第一次导入my_module时,Python会执行my_module.py里的代码,把模块里的变量、函数、导入的库都封装成一个模块对象存在内存里。之后不管是在main.py里创建多少个MyClass实例,只要它们引用my_module,都是直接指向已经加载好的那个模块对象,不会重新加载模块或复制变量。
要不要改单例/静态类?
完全没必要。Python模块本身就是天然的单例,当前的写法已经是最优解——模块形式适合存放常量、工具函数这类不需要实例化的内容,代码简洁还符合Python的设计逻辑。
如果之后需要让某些变量和MyClass实例绑定(比如每个实例要有自己的x值),那把这些变量移到MyClass的实例属性里就行,不用动模块。
内容的提问来源于stack exchange,提问作者ktom
相关产品推荐
相关产品推荐

