まずは上手いタイトルが付けられなくてごめんなさい。どなたか、良いタイトルがありましたら、変更をお願いします。
以下が質問内容です。

たとえば、

def z():
    res = requests.get(・・・)
    data = res.json()
    retun {・・・
            }

で定義した関数があるとします。dataの中身は、だいたい1万個程度です。
この場合、関数z()を呼び出して、dataの中身を個別に取り出す方法には、以下の2つが考えられると思います(この他に効率の良い方法があったら教えていただけると嬉しいです)。

Case 1:関数内のreturnで個々に指定し、関数外でそれらを個々に呼び出す方法。

def z():
    res = requests.get(・・・)
    data = res.json()
    retun {
            "a" : data["aa"] , 
            "b" : data["bb"] ,
            "c" : data["cc"] ,
            ....
            }

A = z()["a"]
B = z()["b"]
C = z()["c"]
...

Case 2:関数内のreturnではdataのみを指定し、関数外で個々に取り出す方法。

def z():
    res = requests.get(・・・)
    data = res.json()
    retun {
            "data" : data
            }

Da = z()["data"]
A = Da["aa"]
B = Da["bb"]
C = Da["cc"]
・・・

ここで知りたいことは、

『Case1とCase2の場合で、それぞれres = requests.get(・・・)の部分は何度呼び出されているか?』

ということです。勝手な印象としては、Case1の場合は、1万回呼び出されていて(つまり、相手側に1万回の負荷をかけている)、Case2の場合は1回だけ(あとは自分の手元にあるPC内で処理が行われている?)のように思っていました。それとも実は両方とも1万回呼び出しているのでしょうか?

どなたか御教授いただけると幸いです。