def __init__(self):
self.headers={'Accept':'application/json'}
def req1(self):
headers=self.headers
headers['bla']='bla'
headers['Content-Type']='application/json'
r=requests.post(url,headers=headers)
def req2(self):
headers=self.headers
headers['bla']='bla'
r=requests.post(url + "/test1",headers=headers)
出于某种原因,当我按此顺序执行这些功能时:
req1()
req2()
'Content-Type'标头也会在req2()
中发送。
当我以相反的顺序执行这些功能时:
req2()
req1()
'Content-Type'标头仅在req1()
中发送。
这可能是什么原因发生的?也许请求会在不询问的情况下添加Content-Type
标题?
现在我正在解决这个问题:
def req2():
headers=self.headers
headers['bla']='bla'
del headers['Content-Type']
r=requests.post(url + "/test1",headers=headers)
我正在寻找更好的解决方案。有人可以解释发生了什么吗?
答案 0 :(得分:4)
当您将headers
分配给self.headers
,您实际上并未复制字典时,您只是创建另一个参考。然后,当您更新headers
时,self.headers
会更新,因为它们都指向同一个对象。
如果您需要实际复制字典,有不同的方法,请参阅: