1)
(askcompany) C:\Dev\askcompany>python manage.py shell_plus --print-sql --ipython
...
In [8]: Post.objects.all()[1:3]
Out[8]: SELECT "instagram_post"."id",
"instagram_post"."message",
"instagram_post"."photo",
"instagram_post"."is_public",
"instagram_post"."created_at",
"instagram_post"."updated_at"
FROM "instagram_post"
ORDER BY "instagram_post"."id" DESC
LIMIT 2
OFFSET 1
Execution time: 0.001002s [Database: default]
<QuerySet [<Post: 두번 쨰>, <Post: 첫번째 메세지>]>
In [9]: Post.objects.all()[1:3:1]
SELECT "instagram_post"."id",
"instagram_post"."message",
"instagram_post"."photo",
"instagram_post"."is_public",
"instagram_post"."created_at",
"instagram_post"."updated_at"
FROM "instagram_post"
ORDER BY "instagram_post"."id" DESC
LIMIT 2
OFFSET 1
Execution time: 0.000000s [Database: default]
Out[9]: [<Post: 두번 쨰>, <Post: 첫번째 메세지>]
sql을 요청해서 확인했을 때 LIMIT(stop-start), OFFSET(start) 두 가지만 있는 것을 확인할 수 있다. step 값을 넣지 않으면 Out[8]에서 QuerySet을 반환하고 넣으면 Out[9]에서 리스트 타입을 반환함을 알 수 있는데, 따라서 step 값은 sql이 아닌 장고의 쿼리셋이 처리하면서 새로운 리스트를 만들어-반환하는 것임을 알 수 있다.