title: Understanding server requests: instances vs references
body: <p>I am trying to understand a Python package called Instaloader and how many requests are actually being made to the Instagram server. With Instaloader, one can create a Profile instance from a given username with the following snippet of code:</p>
  <pre><code>loader = Instaloader()
  loader.load_session_from_file(login_name)
  profile = Profile.from_username(loader.context, target_profile) 
  </code></pre>
  <p>Q1. Am I correct in assuming the last line makes a single request to the Instagram server? Am I also correct in assuming I am creating a data object (and not a reference) that is being stored in the &quot;profile&quot; variable?</p>
  <p><code>profile_full_name = profile.full_name</code></p>
  <p>Q2. Am I correct in assuming this does not make a request to the server, but retrieves a parameter from the data object in the profile variable?</p>
  <p><code>followers = profile.get_followers()</code></p>
  <p>Q3. Am I correct in assuming this makes another request to the server and stores the data object in the &quot;followers&quot; variable? The documentation says the return type is &quot;NodeIterator[Profile]&quot;. Does this mean I am storing the data object for each profile from the target's followers? Or am I making a reference to each of those profiles?</p>
  <p>Q4. If I am storing the data object for each profile, does that mean extracting information from the data object for these profiles will NOT make additional requests to the server? (Because I already have it stored in the &quot;followers&quot; variable?)</p>
  <p>Or does it operate as a reference and thus: each moment I extract additional parameters from a follower profile, it will require an additional request to the server?</p>