Python:以相同方式初始化的对象会相互影响



我正在Python中创建一个类似以下的类:

stat_list = ['Health', 'Strength', 'Stamina']
empty_stats = dict.fromkeys(stat_list, 0)

class Stats:
def __init__(self, stat_dict=None):
if stat_dict is None:
stat_dict = empty_stats
self.stat_dict = stat_dict
self.fill_stat_dict()
def fill_stat_dict(self):
for stat in stat_list:
if stat not in self.stat_dict:
self.stat_dict[str(stat)] = 0
def increase_stat(self, stat, amount):
if stat in self.stat_dict.keys():
self.stat_dict[stat] += amount
def sum_stat(self):
return sum(self.stat_dict.values())

到目前为止,还不错,但我遇到了以下问题:

blank1 = Stats()
print(blank1.sum_stat())
blank2 = Stats()
print(blank2.sum_stat())
not_blank = Stats({'Stamina': 4})
print(not_blank.sum_stat())
blank2.increase_stat('Health', 2)
print(blank1.sum_stat())
print(blank2.sum_stat())
print(not_blank.sum_stat())

输出:004.2.2.4

我希望blank1和blank2是Stats类的独立对象,最初创建为空,可以独立修改。但我在这里看到的是,修改blank1会影响blank2,而not_blank仍然是独立的。我做错了什么?

字典的是通过引用传递的,这意味着empty_stats正被Stats修改,请尝试更改行,以便生成新的副本

...
def __init__(self, stat_dict=None):
if stat_dict is None:
stat_dict = empty_stats.copy()# <- change this
self.stat_dict = stat_dict
self.fill_stat_dict()
...

最新更新