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)我在找一个更好的解决方案。有人能解释一下发生了什么吗?
发布于 2017-02-01 01:15:28
当您将headers赋值给self.headers时,您实际上并没有复制字典,而只是创建了另一个引用。然后,当您更新headers时,self.headers也会更新,因为两者都指向相同的对象。
如果您需要实际复制字典,有多种方法可供选择,请参考:
https://stackoverflow.com/questions/41963518
复制相似问题