Telegram Group & Telegram Channel
🐍 Задача на внимательность и глубокое понимание Python: ловушка `defaultdict` и мутабельных объектов

Представьте, что вы разрабатываете систему трекинга активностей пользователей на сайте. Вам нужно собрать словарь, где каждому пользователю соответствует список его действий.

Вы решаете использовать collections.defaultdict(list) для удобства, и пишете такой код:


from collections import defaultdict

actions = defaultdict(list)

def track(user_id, action):
actions[user_id].append(action)

track('alice', 'login')
track('bob', 'view')
track('alice', 'logout')

# Теперь вы хотите скопировать этот словарь
copy_actions = actions.copy()

# Допишем в оригинал
track('bob', 'logout')

# Посмотрим, как выглядит копия
print(copy_actions['bob']) # Что будет напечатано?


🧠 Вопрос:
Что будет напечатано? Почему?
Как сделать так, чтобы copy_actions не изменился при добавлении новых действий в actions?

💥 Подвох
Метод copy() копирует только верхний уровень словаря. То есть, списки значений не копируются — это всё те же самые объекты в памяти. Поэтому при track('bob', 'logout') список actions['bob'] изменяется, и это тот же самый список, что лежит в copy_actions['bob'].

➡️ Ответ: print(copy_actions['bob']) напечатает ['view', 'logout'].

Как правильно?
Чтобы избежать такой проблемы, используйте глубокое копирование:


import copy

copy_actions = copy.deepcopy(actions)


Теперь copy_actions не изменится при дальнейшем редактировании actions.

📌 Вывод
Даже опытные разработчики иногда забывают: copy() не копирует вложенные структуры данных!
Если в значениях словаря лежат мутабельные объекты, обязательно подумайте — а не нужен ли вам deepcopy()?

🧪 Попробуйте изменить defaultdict(list) на обычный dict — и посмотрите, что изменится.



tg-me.com/python_job_interview/1107
Create:
Last Update:

🐍 Задача на внимательность и глубокое понимание Python: ловушка `defaultdict` и мутабельных объектов

Представьте, что вы разрабатываете систему трекинга активностей пользователей на сайте. Вам нужно собрать словарь, где каждому пользователю соответствует список его действий.

Вы решаете использовать collections.defaultdict(list) для удобства, и пишете такой код:


from collections import defaultdict

actions = defaultdict(list)

def track(user_id, action):
actions[user_id].append(action)

track('alice', 'login')
track('bob', 'view')
track('alice', 'logout')

# Теперь вы хотите скопировать этот словарь
copy_actions = actions.copy()

# Допишем в оригинал
track('bob', 'logout')

# Посмотрим, как выглядит копия
print(copy_actions['bob']) # Что будет напечатано?


🧠 Вопрос:
Что будет напечатано? Почему?
Как сделать так, чтобы copy_actions не изменился при добавлении новых действий в actions?

💥 Подвох
Метод copy() копирует только верхний уровень словаря. То есть, списки значений не копируются — это всё те же самые объекты в памяти. Поэтому при track('bob', 'logout') список actions['bob'] изменяется, и это тот же самый список, что лежит в copy_actions['bob'].

➡️ Ответ: print(copy_actions['bob']) напечатает ['view', 'logout'].

Как правильно?
Чтобы избежать такой проблемы, используйте глубокое копирование:


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

Share with your friend now:
tg-me.com/python_job_interview/1107

View MORE
Open in Telegram


telegram Telegram | DID YOU KNOW?

Date: |

Can I mute a Telegram group?

In recent times, Telegram has gained a lot of popularity because of the controversy over WhatsApp’s new privacy policy. In January 2021, Telegram was the most downloaded app worldwide and crossed 500 million monthly active users. And with so many active users on the app, people might get messages in bulk from a group or a channel that can be a little irritating. So to get rid of the same, you can mute groups, chats, and channels on Telegram just like WhatsApp. You can mute notifications for one hour, eight hours, or two days, or you can disable notifications forever.

NEWS: Telegram supports Facetime video calls NOW!

Secure video calling is in high demand. As an alternative to Zoom, many people are using end-to-end encrypted apps such as WhatsApp, FaceTime or Signal to speak to friends and family face-to-face since coronavirus lockdowns started to take place across the world. There’s another option—secure communications app Telegram just added video calling to its feature set, available on both iOS and Android. The new feature is also super secure—like Signal and WhatsApp and unlike Zoom (yet), video calls will be end-to-end encrypted.

telegram from hk


Telegram Python вопросы с собеседований
FROM USA