我有一个名为SalesSimulator的类,该类具有一个称为dict的属性common_params
。它包含一个名为number_agents
的键,它指向一个整数值。
dict的值具有在 init 过程中从另一个名为SimulatorObjects的文件文件中提取的值,该文件包含提供给SalesSimulator的默认值。
该类的用户可以检查此属性,并在必要时将值从默认值更改为自己的首选项。一切正常。我发现奇怪的是,如果我创建该类的一个实例并为属性common_params
中的一项设置新值,该值将馈送到该类的所有将来实例。
例如:
ss = SalesSimulator()
print(ss.common_params['number_agents'])
ss.common_params['number_agents'] = 10
print(ss.common_params['number_agents'])
到目前为止,一切都很好。但是现在,如果我创建该类的新实例:
new_ss = SalesSimulator() 打印(new_ss.common_params ['number_agents'])
我期望对于该类的新实例,该值将回到1,这是在SalesSimulator构造函数中调用的默认值。
以下是该构造函数的相关部分:
import SimulatorObjects as so #this is my file of default values
class SalesSimulator(object):
def __init__(self):
# some other stuff happens here that is not relevant
# set default parameters
self.common_params = so.common_params
SimulatorObject文件中的项目如下:
common_params = {'number_agents': 1,
'other_stuff': [],
'some_factor': 1.4}
看来我可以通过以下方法解决问题:
self.common_params = copy.deepcopy(so.common_params)
这是可以接受的解决方案吗?