使用线程和队列库运行线程时,我在线程run()函数中创建了一个对象。让我们说这个班是这样的:
class Test():
def __init__(self, dictionary={}):
self.dict = dictionary
当我尝试在不同的线程中访问字典时,似乎Python只创建了一个字典实例。这是Thread类。我开始了其中两个:
class ThreadTest(threading.Thread):
def run(self):
while True:
// interact with Queue items
obj = Test()
print "%s - %s" % (self.name, id(obj.dict))
queue.task_done()
输出:
Thread-1 - 19219616
Thread-2 - 19219616
这实在令人困惑,因为Test类创建了两次,但它共享同一个字典。
在这种情况下,有没有办法创建一个新的字典实例?
答案 0 :(得分:2)
默认参数仅在遇到def
行时评估一次。因此,您的默认参数dictionary={}
在所有实例之间共享。
改为使用dictionary=None
和
if dictionary is None:
self.dict = {}
else:
self.dict = dictionary
每次都创建一个新实例。