Python 将对象附加到实例列表,但仅在该实例中
我有一个名为Python 将对象附加到实例列表,但仅在该实例中,python,python-3.x,Python,Python 3.x,我有一个名为TerrainTile的对象列表。 每个实例都有一个名为resourceList的列表 resourceList = [] 我在此方法中将名为obj的对象附加到此列表中: def add_resource_object (self, obj): self.resourceList.append(obj) return 出于某种原因,不是每个实例都有自己的名为resourceList的列表,而是所有实例都共享相同的resourceList列表,当它被附加到所有实例时
TerrainTile
的对象列表。
每个实例都有一个名为resourceList
的列表
resourceList = []
我在此方法中将名为obj
的对象附加到此列表中:
def add_resource_object (self, obj):
self.resourceList.append(obj)
return
出于某种原因,不是每个实例都有自己的名为resourceList
的列表,而是所有实例都共享相同的resourceList
列表,当它被附加到所有实例时,所有实例都被附加到该列表
为什么将
.append()
附加到TerrainTile
的所有实例?基于上面的代码片段:
resourceList = []
您正在创建一个在所有实例之间共享的类变量,而不是一个特定实例的局部实例变量。相反,请按如下方式初始化实例变量:
def __init__(self):
self.resourceList = []
有关详细信息,请参见此处:如注释和其他答案中所述,您将向每个列表传递相同的实例变量。根据对象的类型,您可以在将其添加到每个列表之前复制该对象 像这样导入它
from copy import deepcopy
new_obj = deepcopy(obj)
像这样使用它
from copy import deepcopy
new_obj = deepcopy(obj)
问题是,从一开始,您的
self.resourceList
可能都指向同一个列表。你需要展示你的类/实例是如何构造的,特别是self.resourceCelist
。盲目猜测:你在构造函数之外的类中定义resourceList
。请参阅(旁注:在Python代码中更常见的做法是调用此resource\u list
)