Python线程类实例为所有实例更改一个变量

Python线程类实例为所有实例更改一个变量,python,multithreading,class,Python,Multithreading,Class,我是python线程的新手,对此我找不到任何答案。如果这是一个重复的问题,很抱歉。 我有这样一个线程类: class Ant(Thread): def __init__(self, start_item, possible_items, backpack_limit, pheromone_map, alpha, beta, eta): Thread.__init__(self) self.start_item = start_item se

我是python线程的新手,对此我找不到任何答案。如果这是一个重复的问题,很抱歉。 我有这样一个线程类:

class Ant(Thread):
    def __init__(self, start_item, possible_items, backpack_limit, pheromone_map, alpha, beta, eta):
        Thread.__init__(self)
        self.start_item = start_item
        self.item = start_item
        self.possible_items = possible_items
        self.selected_items = []
        self.backpack_limit = backpack_limit
        self.weight_sum = 0
        self.backpack_value = 0
        self.pheromone_map = pheromone_map
        self.alpha = alpha
        self.beta = beta
        self.eta = eta  # (weight/value)

        # append start location to route, before doing random walk
        self.add_backpack(start_item)
        self.tour_complete = False

    def run(self):
        while self.possible_items and self.is_remaining_space_feasible():
            next_item = self.pick_item()
            self.item = next_item
            self.add_backpack(next_item)
        self.tour_complete = True

    def add_backpack(self, next_item):
        self.update_items(next_item)
        self.update_backpack(next_item)

    def update_items(self, next_item):
        self.selected_items.append(next_item)
        self.possible_items.remove(next_item)

    def update_backpack(self, next_item):
        self.weight_sum += next_item.get_weight()
        self.backpack_value += next_item.get_value()
我在另一个类中创建了大量实例,如下所示:
ants=[Ant(self.items[random.randint(0,len(self.items)-1)],self.items,self.backpack\u limit,self.inforomone\u matrix,self.alpha,self.beta,self.eta)用于范围内(self.Ant\u count)]


正如您所看到的,当我创建一个ant实例时,它被称为add_backack function,在某个时刻,这段代码工作
self.mables_items.remove(next_item)
,程序完成了初始化步骤并创建了下一个实例。但是对于下一个实例,
可能的\u项
已删除该项,这导致列表。删除(x):x不在列表中错误。我尝试了深度复制,但不起作用。

与您的问题没有直接关系,但不是
线程。\uu init…
只是
super()。\uu init…
?在任何情况下,我们都需要所有必要的代码和数据来重现这一点。请参阅:.@AMC不一定,但您需要使用多重继承构造一个类来演示其区别。当您创建所有这些
Ant
实例时,
self.items
是什么?它们似乎共享同一个列表。@chepner
self.items
是自定义项目类的列表,它只包含3个变量。就像我说的,每次创建ant实例时,我都会尝试深度复制
self.items
copy.deepcopy(self.items)
,但它不起作用。我没有完全理解整个问题,但根据问题标题,如果您想更改thread类的一个实例中的变量,以影响其他实例中的同一变量,然后可以使用静态类变量。如果我正确理解了您的问题,请告诉我,我将用示例代码将其转换为答案。