Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Python: Python, assignment, copy, mutable, immutable, reference

В чем разница между ссылкой и копией объекта в Python?

Вопрос проверяет понимание работы с изменяемыми и неизменяемыми типами данных в Python, а также механизмов присваивания и копирования объектов.

Короткий ответ

В Python переменная хранит ссылку на объект, а не сам объект. При присваивании одной переменной другой создается новая ссылка на тот же объект. Для создания независимой копии используют модуль copy: поверхностную (copy.copy) или глубокую (copy.deepcopy). Изменение изменяемого объекта через одну ссылку отражается на всех ссылках, указывающих на него.

Длинный ответ

Ссылки и копии в Python

В Python переменные не содержат сами объекты, а лишь ссылаются на них. Когда вы присваиваете одну переменную другой, вы копируете ссылку, а не объект. Это означает, что обе переменные указывают на один и тот же объект в памяти. Для изменяемых объектов (списки, словари, множества) это может привести к неожиданным побочным эффектам при изменении через одну из ссылок.

Поверхностное и глубокое копирование

Модуль copy предоставляет два способа создания копий:

  • copy.copy(x) — поверхностная копия: создает новый объект, но вложенные объекты остаются ссылками на оригинал.
  • copy.deepcopy(x) — глубокая копия: рекурсивно копирует все вложенные объекты, создавая полностью независимую структуру.

Пример кода

import copy

# Ссылка
original = [1, 2, [3, 4]]
ref = original
ref[0] = 99
print(original)  # [99, 2, [3, 4]] — изменилось!

# Поверхностная копия
shallow = copy.copy(original)
shallow[2][0] = 100
print(original)  # [99, 2, [100, 4]] — вложенный список изменился

# Глубокая копия
deep = copy.deepcopy(original)
deep[2][0] = 200
print(original)  # [99, 2, [100, 4]] — не изменился

Вывод

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

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    3

Навыки

  • Python

    Python

Ключевые слова

#Python

#assignment

#copy

#mutable

#immutable

#reference

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.