soumyadghosh.github.io

Python Mutable References with Caching (opens in new tab)

Feeds

✨ Discovered from this domain
Python Mutable References with Caching | Soumya's Web soumyadghosh.github.io

So, while working with caching and scrapping, I understood the difference between immutable and mutable objects/datatypes very clearly. I had a scenario, where I am webscraping an API, the code looks like this. from aiocache import cached @cached(ttl=7200) async def get_forecast(station_id: str) -> list[dict]: data: dict = await scrape_weather(station_id) # doing some operation return forecasts and then using this utility tool in the endpoint. async def get_forecast_by_city( param: Annotated[StationIDQuery, Query()], ) -> list[UpcomingForecast]: forecasts_dict: list[dict] = await get_forecast(param.station_id) forecasts_dict.reversed() forecasts: deque[UpcomingForecast] = deque([]) for forecast in forecasts_dict: date_delta: int = ( date.fromisoformat(forecast["forecast_date"]) - date.today() ).days if date_delta <= 0: break forecasts.appendleft(UpcomingForecast.model_validate(forecast)) return list(forecasts) But, here is the gotcha, something I was doing inherently wrong. Lists in python are mutable objects. So, reversing the list modifies the list in place, without creating a new reference of the list. My initial approach was to do this

Keyboard Shortcuts

Navigation

Next / previous post
j/k
Open post
oorEnter
Preview post
v

Post Actions

Love post
a
Like post
l
Dislike post
d
Undo reaction
u
Save / unsave
s

Recommendations

Add interest / feed
Enter
Not interested
x

Go to

Home
gh
Interests
gi
Feeds
gf
Likes
gl
History
gy
Changelog
gc
Settings
gs
Discover
gb
Search
/

General

Show this help
?
Submit feedback
!
Close modal / unfocus
Esc

Press ? anytime to show this help