QuerySet์ ์ธ์  ํ๊ฐ(evaluate)๋๋๊ฐ?!
- ์ฟผ๋ฆฌ์
์ ์ค์ ๋ก DB๋ฅผ hittingํ์ง ์๋๋ค
 
- ๊ทธ๋ผ ์ธ์  DB๋ฅผ hittingํ๋ ๊ฐ?!
- iteration
=> iteration์ ์ต์ด๋ก ์คํํ  ๋ ํ๊ฐ๋จ
์๋์ ์ฝ๋๋ ์ฌ์ฉํ์ง ๋ง๊ฒ. 
for e in Entry.objects.all():
    print(e.headline)
- slicing
=> unevaluated๋ QuerySet์ ๋ฆฌํดํจ! slicingํ  ๋ step ํ๋ผ๋ฏธํฐ๋ฅผ ์ฐ๋ฉด evaluateํ๋ฉด์ list๋ฅผ ๋ฐํ 
- pickling/caching
=> ๊ฒฐ๊ณผ๋ฅผ db๋ก ๋ถํฐ ์ฝ์ด์ง 
- repr()
=> repr()์ ํธ์ถํ  ๋ evaluate ๋จ
์ด๋ interpreter ํ๊ฒฝ์์์ ํธ์๋ฅผ ์ ๊ณตํ๊ธฐ ์ํจ!  
- len()
=> len()์ ํธ์ถํ  ๋ evaluate ๋จ
record์ ๊ฐ์๋ฅผ ์ธ๊ณ  ์ถ์ ์ฉ๋๋ก๋ผ๋ฉด! len๋ง๊ณ  count ๋ฉ์๋๋ฅผ ์ฐ์ธ์ 
- list()
=> force evaluation of a QuerySet by calling list() on it. 
entry_list = list(Entry.objects.all())
- bool()
=> boolean ๋ฌธ๋งฅ์ผ๋ก ์ฌ์ฉ๋, "bool(), or, and, if"์ ๊ฐ์ ๊ฑฐ๋ ์ธ ๋๋ evaluate๋จ 
if Entry.objects.filter(headline="test"):
	print("There is at least one Entry with the handle Test")
์กด์ฌ์ ๋ฌดํ ์ฒดํฌํ๊ณ  ์ถ๋ค๋ฉด bool()๋์  exists() ๋ฉ์๋ ์ฐ์ผ! 
Pickling QuerySets
pickle
: ํผํด ๋ชจ๋์ ํ์ด์ฌ ๊ฐ์ฒด ๊ตฌ์กฐ๋ฅผ serialize/de-serializeํ๊ธฐ ์ํ ๋ฐ์ด๋๋ฆฌ ํ๋กํ ์ฝ์ ๊ตฌํํ ๊ฒ์
https://docs.python.org/3/library/pickle.html#module-pickle
QuerySet์ ํผํดํ๋ฉด, ํผํด๋ง๋๊ธฐ ์ ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๋๋ก ๊ฐ์ ํจ(force)
ํผํด๋ง์ ์บ์๋ ์ฟผ๋ฆฌ์
์ด ๋ฆฌ๋ก๋๋  ๋, ์บ์ฑ์ ํ๋ฆฌ์ปค์๋ก์ ๋ณดํต ์ฌ์ฉ๋จ
This means that when you unpickle a QuerySet, it contains the results at the moment it was pickled, rather than the results that are currently in the database.

Reference