PRO_PYTHON_CODE Telegram 1811
🐍 Хитрая задача на Python для опытных разработчиков

🔹 Уровень: Advanced
🔹 Темы: изменяемые объекты, ссылки, list multiplication, side effects

📌 Условие

Что выведет следующий код?


matrix = [[0] * 3] * 3

matrix[0][0] = 1

for row in matrix:
print(row)


Вопросы

1. Почему изменяется весь первый столбец, а не только [0][0]?
2. Как работает [[0]*3]*3 и почему это опасно?
3. Как правильно создать независимую матрицу 3×3 из нулей?

🔍 Разбор

Ожидаемый (и удивительный!) вывод:

[1, 0, 0]
[1, 0, 0]
[1, 0, 0]


🔧 Почему так происходит

- Выражение [[0] * 3] * 3 создаёт три ссылки на один и тот же вложенный список.
- matrix[0][0] = 1 меняет все строки, потому что они указывают на один и тот же объект в памяти.

⚠️ Подвох

Это один из самых частых скрытых багов в Python, особенно при создании вложенных списков.

🧠 Решение

Нужно использовать генератор списка, чтобы создать три независимых объекта:


matrix = [[0] * 3 for _ in range(3)]


Теперь matrix[0][0] = 1 затронет только первую строку:


[1, 0, 0]
[0, 0, 0]
[0, 0, 0]


📌 Всегда проверяй, создаёшь ли ты уникальные объекты, особенно если работаешь с вложенными структурами.



tgoop.com/pro_python_code/1811
Create:
Last Update:

🐍 Хитрая задача на Python для опытных разработчиков

🔹 Уровень: Advanced
🔹 Темы: изменяемые объекты, ссылки, list multiplication, side effects

📌 Условие

Что выведет следующий код?


matrix = [[0] * 3] * 3

matrix[0][0] = 1

for row in matrix:
print(row)


Вопросы

1. Почему изменяется весь первый столбец, а не только [0][0]?
2. Как работает [[0]*3]*3 и почему это опасно?
3. Как правильно создать независимую матрицу 3×3 из нулей?

🔍 Разбор

Ожидаемый (и удивительный!) вывод:

[1, 0, 0]
[1, 0, 0]
[1, 0, 0]


🔧 Почему так происходит

- Выражение [[0] * 3] * 3 создаёт три ссылки на один и тот же вложенный список.
- matrix[0][0] = 1 меняет все строки, потому что они указывают на один и тот же объект в памяти.

⚠️ Подвох

Это один из самых частых скрытых багов в Python, особенно при создании вложенных списков.

🧠 Решение

Нужно использовать генератор списка, чтобы создать три независимых объекта:


matrix = [[0] * 3 for _ in range(3)]


Теперь matrix[0][0] = 1 затронет только первую строку:


[1, 0, 0]
[0, 0, 0]
[0, 0, 0]


📌 Всегда проверяй, создаёшь ли ты уникальные объекты, особенно если работаешь с вложенными структурами.

BY Python RU


Share with your friend now:
tgoop.com/pro_python_code/1811

View MORE
Open in Telegram


Telegram News

Date: |

Private channels are only accessible to subscribers and don’t appear in public searches. To join a private channel, you need to receive a link from the owner (administrator). A private channel is an excellent solution for companies and teams. You can also use this type of channel to write down personal notes, reflections, etc. By the way, you can make your private channel public at any moment. But a Telegram statement also said: "Any requests related to political censorship or limiting human rights such as the rights to free speech or assembly are not and will not be considered." Add up to 50 administrators Telegram is a leading cloud-based instant messages platform. It became popular in recent years for its privacy, speed, voice and video quality, and other unmatched features over its main competitor Whatsapp. For crypto enthusiasts, there was the “gm” app, a self-described “meme app” which only allowed users to greet each other with “gm,” or “good morning,” a common acronym thrown around on Crypto Twitter and Discord. But the gm app was shut down back in September after a hacker reportedly gained access to user data.
from us


Telegram Python RU
FROM American