这是我的第一个问题BTW。 所以我一直在使用Python中的程序遇到这个问题,我正在创建一个能够使角色具有不同的统计数据,能力等的角色类。该类工作得很好,但问题是;我不知道如何制作角色的变体。 例如,
class Char:
def __init__(self, HP, attack):
self.HP = HP
self.att = attack
Tom = Char(5, 7)
Bill = Char(6, 6)
player1 = Tom
player2 = Tom
print player1.HP, player2.HP
#prints out 5, 5
player1.HP = 3
print player1.HP, player2.HP
#prints out 3, 3
如果我可以制作角色的变体,它会在最后一部分打印出3,5。 我认为这可以用另一个类或函数修复,但我不知道如何。帮助
答案 0 :(得分:0)
你有内存问题。当您分配player1 = Tom
时,player1
会获得对Tom
的引用,与player2
相同,这意味着player1.HP
实际上正在更改Tom
。相反,您要执行的操作是脚本顶部的from copy import deepcopy
,然后说player1 = deepcopy(Tom)
然后player2 = deepcopy(Tom)
。
答案 1 :(得分:0)
如果您打印id(player1)
和id(player2)
,您会看到它们指向同一个对象,这就是更改同步的原因。如果您想要创建变体,可以使用copy
模块:
>>> import copy
>>> player2 = copy.copy(Tom)
>>> player2.HP = 3
>>> print player1.HP, player2.HP
5 3
另请参阅the documentation中浅层和深层复制之间的区别,这也解释了为什么这是必要的:
Python中的赋值语句不会复制它们创建的对象 目标和对象之间的绑定。对于收藏品 可变或包含可变项目,有时需要一份副本 可以在不改变另一个副本的情况下更改一个副本。