Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将对象附加到实例列表,但仅在该实例中_Python_Python 3.x - Fatal编程技术网

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