如何在python中创建类克隆对象?

时间:2018-10-14 16:59:53

标签: python list clone

我正在创建一个带有“战场”的游戏。我为此创建了一个类:

class Battlefield:
    units = [[Warrior1, Warrior2]]

我正在创建一个函数来克隆战场上的单位,因此新的Battlefield.units将是:

print (Battlefield.units)
[[Warrior1, Warrior2], [Warrior1, Warrior2]]

“ Warrior1”类似于

Warrior1 = [1, 3, 2, 5, 6]

造成这一困难的原因是,我需要仅能够调整第一个Warrior1的统计信息,而无需调整第二个Warrior1的统计信息。我在堆栈溢出中看到的所有问题都解决了如何将列表复制到新列表中,例如:

new_list = old_list.copy()

但是,我将无法在现有函数中引用此new_list,因为在游戏中,我一直在引用“ Battlefield.unit”对象。换句话说,我必须在现有对象内克隆,同时使列表中的变量在某种程度上彼此不同,以便我可以更改一个而不更改另一个。

请告知。谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用copy.deepcopy

>>> import copy
>>> a = [[1, 2], [3,4]]
>>> b = copy.deepcopy(a)
>>> b[0][0] = 4
>>> a
[[1, 2], [3, 4]]
>>> b
[[4, 2], [3, 4]]

或者对于面向对象的方法:

class Warrior():
  def __init__(self):
    pass
  def copy(self):
    return copy.deepcopy(self)