这要看单例模式的对象是在哪里创建的了吧,一般情况下单例模式所引用的对象是在被 reload 的 module 里初始化的,那 reload 会创建新的对象,而如果单例引用的是存在内存里类似 int 的基本类型对象,reload 之后依然会引用原本的对象。
si_cls.py```
#!/bin/python
# coding: utf-8
ph = {'ab': 2}
# ph = 32
class SI:
def __new__(cls, *args, **kwargs):
return ph
def id(self):
return id(self)
si_instance = SI()
```
test.py```
#!/bin/python
# coding: utf-8
import si_cls
from importlib import reload
s1 =
si_cls.SI()
s2 =
si_cls.SI()
print(f'id(s1)={id(s1)}, id(s2)={id(s2)}, id(si_instance)={id(si_cls.si_instance)}')
reload(si_cls)
s1 =
si_cls.SI()
s2 =
si_cls.SI()
print(f'id(s1)={id(s1)}, id(s2)={id(s2)}, id(si_instance)={id(si_cls.si_instance)}')
```