我想生成一个类的多个对象,其中只有该类的属性不同。让我举个例子
class A:
...: def __init__(self, x):
...: self.x = x
...: def update_dic(self, dictionary):
...: self.x.update(dictionary)
...:
In [55]: list_class = list()
In [56]: shared_dict = {'a': 1}
现在我想生成10个不同的对象,他们共享shared_dict
但是以不同的方式更新它:
In [58]: for i in range(0, 10):
...: obj = A(shared_dict)
...: obj.update_dic({'b': i})
...: list_class.append(obj)
...:
正如我们在下面的输出中看到的那样,它们是不同的对象:
In [59]: list_class
Out[59]:
[<__main__.A instance at 0xac0c7d6c>,
<__main__.A instance at 0xac13914c>,
<__main__.A instance at 0xac0c7d8c>,
<__main__.A instance at 0xac0c7dac>,
<__main__.A instance at 0xac0c7dcc>,
<__main__.A instance at 0xac0c7e0c>,
<__main__.A instance at 0xac0c7e2c>,
<__main__.A instance at 0xac0c7e4c>,
<__main__.A instance at 0xac0c7e6c>,
<__main__.A instance at 0xac0c7e8c>]
但是,它们会获得所有相同的元素b
:
In [60]: [_.x for _ in list_class]
Out[60]:
[{'a': 1, 'b': 9},
{'a': 1, 'b': 9},
{'a': 1, 'b': 9},
{'a': 1, 'b': 9},
{'a': 1, 'b': 9},
{'a': 1, 'b': 9},
{'a': 1, 'b': 9},
{'a': 1, 'b': 9},
{'a': 1, 'b': 9},
{'a': 1, 'b': 9}]
我想这与列表是一个可变对象有关。但是到底发生了什么,更重要的是如何解决它,即得到这样的输出:
In [60]: [_.x for _ in list_class]
Out[60]:
[{'a': 1, 'b': 0},
{'a': 1, 'b': 1},
{'a': 1, 'b': 2},
{'a': 1, 'b': 3},
{'a': 1, 'b': 4},
{'a': 1, 'b': 5},
{'a': 1, 'b': 6},
{'a': 1, 'b': 7},
{'a': 1, 'b': 8},
{'a': 1, 'b': 9}]