【问题标题】:Does response from requests.get() use the same memory or allocates new memory each time in python?来自 requests.get() 的响应是否使用相同的内存或每次在 python 中分配新内存?
【发布时间】:2015-04-12 00:24:04
【问题描述】:

我使用dict_a['response'] = requests.get(given_url) 使用模块化请求以给定频率从某个网站获取数据。 返回的响应(requests.get(given_url))是字典对应的json对象,后面会用到。

requests.get(given_url) 的响应是使用相同的内存还是每次在 python 中分配新的内存? 如果稍后是这种情况,则 dict_a['response'] 可能会更改,恕不另行通知。 恐怕会发生这种情况,我每次都使用dict_a['response'] = copy.deepcopy(requests.get(given_url))。 这似乎完全没有必要,所以我选择问这个问题以确保没有必要这样做。

【问题讨论】:

    标签: python memory request response allocation


    【解决方案1】:

    字典没有被重复使用:

    >>> url = 'http://google.com'
    >>> requests.get(url) is requests.get(url)
    False
    

    【讨论】:

    • 没错,但is 测试它们是否是同一个对象。 == 仅当它们被视为相等时(可能是不同内存位置中的 2 个对象)。不管requests.get 不返回字典?
    • @GP89:好点。编辑答案。 (不过,我取的是结果的id,所以它相当于is。)
    • @GP89 ​​在我的例子中 requests.get 返回一个对应于字典的 json 对象。感谢您的通知,我将编辑问题。
    • @Steven 对,我在您进行编辑之前发表了评论:P 我希望这就是 is 所做的一切。
    • Rumbalski,我从你的回答中学到了一项新技能,通过你的“就这么做”的方式。它既简单又酷!虽然我接受第二个答案是因为它让我知道了根本原因,但我还是谢谢你。
    【解决方案2】:

    Requests.get 是一种方法。排除涉及全局变量的异常情况(请求不使用),每次调用方法时方法级别的变量都是唯一绑定的。一旦方法返回,返回的对象将绑定到您为其分配的任何名称。

    所以如果你做类似的事情

    dict[a] = requests.get(url1)
    dict[b] = requests.get(url2)
    

    您不必担心 dict[a] 会神奇地更改为包含来自 url2 的响应。但是当然

    dict[a] = requests.get(url1)
    dict[a] = requests.get(url2)
    

    会导致 dict[a] 改变。

    【讨论】:

      猜你喜欢
      • 2015-12-24
      • 2019-05-10
      • 1970-01-01
      • 2021-12-30
      • 1970-01-01
      • 1970-01-01
      • 2020-02-24
      相关资源
      最近更新 更多