HTTP/2 301
date: Wed, 31 Dec 2025 08:14:21 GMT
content-type: text/html; charset=utf-8
content-length: 0
cross-origin-opener-policy: same-origin
location: /courses/
nel: {"report_to":"heroku-nel","response_headers":["Via"],"max_age":3600,"success_fraction":0.01,"failure_fraction":0.1}
referrer-policy: strict-origin-when-cross-origin
report-to: {"group":"heroku-nel","endpoints":[{"url":"https://nel.heroku.com/reports?s=kjWkGEYMTse28ZEi7ie4L1bJZ1QUkgRUN6zKE%2BfnsTI%3D\u0026sid=67ff5de4-ad2b-4112-9289-cf96be89efed\u0026ts=1767168861"}],"max_age":3600}
reporting-endpoints: heroku-nel="https://nel.heroku.com/reports?s=kjWkGEYMTse28ZEi7ie4L1bJZ1QUkgRUN6zKE%2BfnsTI%3D&sid=67ff5de4-ad2b-4112-9289-cf96be89efed&ts=1767168861"
server: cloudflare
set-cookie: csrftoken=5rk5T9tNCd1Ywa0Nw4g5JRyeI0IkFe1f; expires=Wed, 30 Dec 2026 08:14:21 GMT; Max-Age=31449600; Path=/; SameSite=Lax; Secure
set-cookie: cid=607e5c6282384d2ea822beb7a1dbe971; expires=Thu, 31 Dec 2026 08:14:21 GMT; Max-Age=31536000; Path=/
strict-transport-security: max-age=31536000; includeSubDomains; preload
vary: Cookie
via: 2.0 heroku-router
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
cf-cache-status: DYNAMIC
cf-ray: 9b6852a9492a1f95-BLR
alt-svc: h3=":443"; ma=86400
HTTP/2 302
date: Wed, 31 Dec 2025 08:14:22 GMT
content-type: text/html; charset=utf-8
content-length: 0
cross-origin-opener-policy: same-origin
location: /search?kind=course
nel: {"report_to":"heroku-nel","response_headers":["Via"],"max_age":3600,"success_fraction":0.01,"failure_fraction":0.1}
referrer-policy: strict-origin-when-cross-origin
report-to: {"group":"heroku-nel","endpoints":[{"url":"https://nel.heroku.com/reports?s=LA5ChFPVm1lUVsTVqdKgRcIyZmdm9%2Bx%2BzzM5k4i%2Bcnk%3D\u0026sid=67ff5de4-ad2b-4112-9289-cf96be89efed\u0026ts=1767168862"}],"max_age":3600}
reporting-endpoints: heroku-nel="https://nel.heroku.com/reports?s=LA5ChFPVm1lUVsTVqdKgRcIyZmdm9%2Bx%2BzzM5k4i%2Bcnk%3D&sid=67ff5de4-ad2b-4112-9289-cf96be89efed&ts=1767168862"
server: cloudflare
set-cookie: origin=ref-realpython.com; expires=Mon, 25 Sep 2028 08:14:22 GMT; Max-Age=86313600; Path=/
strict-transport-security: max-age=31536000; includeSubDomains; preload
vary: Cookie
via: 2.0 heroku-router
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
cf-cache-status: DYNAMIC
cf-ray: 9b6852aacb3e1f95-BLR
alt-svc: h3=":443"; ma=86400
HTTP/2 200
date: Wed, 31 Dec 2025 08:14:22 GMT
content-type: text/html; charset=utf-8
cross-origin-opener-policy: same-origin
nel: {"report_to":"heroku-nel","response_headers":["Via"],"max_age":3600,"success_fraction":0.01,"failure_fraction":0.1}
referrer-policy: strict-origin-when-cross-origin
report-to: {"group":"heroku-nel","endpoints":[{"url":"https://nel.heroku.com/reports?s=LA5ChFPVm1lUVsTVqdKgRcIyZmdm9%2Bx%2BzzM5k4i%2Bcnk%3D\u0026sid=67ff5de4-ad2b-4112-9289-cf96be89efed\u0026ts=1767168862"}],"max_age":3600}
reporting-endpoints: heroku-nel="https://nel.heroku.com/reports?s=LA5ChFPVm1lUVsTVqdKgRcIyZmdm9%2Bx%2BzzM5k4i%2Bcnk%3D&sid=67ff5de4-ad2b-4112-9289-cf96be89efed&ts=1767168862"
server: cloudflare
strict-transport-security: max-age=31536000; includeSubDomains; preload
vary: Cookie, Accept-Encoding
via: 2.0 heroku-router
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
cf-cache-status: DYNAMIC
content-encoding: gzip
cf-ray: 9b6852ac2cf01f95-BLR
alt-svc: h3=":443"; ma=86400
Tutorial Library – Real Python
[[ resultsCount ]] [[' result' + (resultsCount == 0 || resultsCount > 1 ? "s" : "") ]] for “[[ filters.query.length < 50 ? filters.query : filters.query.substring(0, 50) + "…" ]]”
Relevance
Newest
Recently Viewed
Your bookmarks list is empty
Add bookmarks by clicking on the bookmark ribbon icon when viewing course lessons or articles.
Continue Learning
Recently viewed resources will appear here in your Continue Learning list, so you can quickly pick up where you left off.
Not sure where to begin? Read our Start Here guide or pick a Learning Path .
Sorry, we couldn’t find any results matching this query.
Login Required
You are not logged in. Filtering by bookmark status or learning progress requires a Real Python account. Creating an account is completely free and only takes a minute:
Bookmarked
Completed
[[ result.pub_date ]]
[[ cat ]]
[[ result.description ]]
Fetching Search Results…
Get a Python Cheat Sheet (PDF) and learn the basics of Python, like working with data types, dictionaries, lists, and Python functions: