🐍Задача на внимательность и глубокое понимание Python: ловушка `defaultdict` и мутабельных объектов
Представьте, что вы разрабатываете систему трекинга активностей пользователей на сайте. Вам нужно собрать словарь, где каждому пользователю соответствует список его действий.
Вы решаете использовать collections.defaultdict(list) для удобства, и пишете такой код:
# Теперь вы хотите скопировать этот словарь copy_actions = actions.copy()
# Допишем в оригинал track('bob', 'logout')
# Посмотрим, как выглядит копия print(copy_actions['bob']) # Что будет напечатано?
🧠 Вопрос: Что будет напечатано? Почему? Как сделать так, чтобы copy_actions не изменился при добавлении новых действий в actions?
💥 Подвох Метод copy() копирует только верхний уровень словаря. То есть, списки значений не копируются — это всё те же самые объекты в памяти. Поэтому при track('bob', 'logout') список actions['bob'] изменяется, и это тот же самый список, что лежит в copy_actions['bob'].
✅ Как правильно? Чтобы избежать такой проблемы, используйте глубокое копирование:
import copy
copy_actions = copy.deepcopy(actions)
Теперь copy_actions не изменится при дальнейшем редактировании actions.
📌 Вывод Даже опытные разработчики иногда забывают: copy() не копирует вложенные структуры данных! Если в значениях словаря лежат мутабельные объекты, обязательно подумайте — а не нужен ли вам deepcopy()?
🧪 Попробуйте изменить defaultdict(list) на обычный dict — и посмотрите, что изменится.
🐍Задача на внимательность и глубокое понимание Python: ловушка `defaultdict` и мутабельных объектов
Представьте, что вы разрабатываете систему трекинга активностей пользователей на сайте. Вам нужно собрать словарь, где каждому пользователю соответствует список его действий.
Вы решаете использовать collections.defaultdict(list) для удобства, и пишете такой код:
# Теперь вы хотите скопировать этот словарь copy_actions = actions.copy()
# Допишем в оригинал track('bob', 'logout')
# Посмотрим, как выглядит копия print(copy_actions['bob']) # Что будет напечатано?
🧠 Вопрос: Что будет напечатано? Почему? Как сделать так, чтобы copy_actions не изменился при добавлении новых действий в actions?
💥 Подвох Метод copy() копирует только верхний уровень словаря. То есть, списки значений не копируются — это всё те же самые объекты в памяти. Поэтому при track('bob', 'logout') список actions['bob'] изменяется, и это тот же самый список, что лежит в copy_actions['bob'].
✅ Как правильно? Чтобы избежать такой проблемы, используйте глубокое копирование:
import copy
copy_actions = copy.deepcopy(actions)
Теперь copy_actions не изменится при дальнейшем редактировании actions.
📌 Вывод Даже опытные разработчики иногда забывают: copy() не копирует вложенные структуры данных! Если в значениях словаря лежат мутабельные объекты, обязательно подумайте — а не нужен ли вам deepcopy()?
🧪 Попробуйте изменить defaultdict(list) на обычный dict — и посмотрите, что изменится.
BY Python вопросы с собеседований
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
n the U.S. people generally use Bitcoin as an alternative investment, helping diversify a portfolio apart from stocks and bonds. You can also use Bitcoin to make purchases, but the number of vendors that accept the cryptocurrency is still limited. Big companies that accept Bitcoin include Overstock, AT&T and Twitch. You may also find that some small local retailers or certain websites take Bitcoin, but you’ll have to do some digging. That said, PayPal has announced that it will enable cryptocurrency as a funding source for purchases this year, financing purchases by automatically converting crypto holdings to fiat currency for users. “They have 346 million users and they’re connected to 26 million merchants,” says Spencer Montgomery, founder of Uinta Crypto Consulting. “It’s huge.”
China’s stock markets are some of the largest in the world, with total market capitalization reaching RMB 79 trillion (US$12.2 trillion) in 2020. China’s stock markets are seen as a crucial tool for driving economic growth, in particular for financing the country’s rapidly growing high-tech sectors.Although traditionally closed off to overseas investors, China’s financial markets have gradually been loosening restrictions over the past couple of decades. At the same time, reforms have sought to make it easier for Chinese companies to list on onshore stock exchanges, and new programs have been launched in attempts to lure some of China’s most coveted overseas-listed companies back to the country.