← Назад к вопросам

Что такое метод Copy в Python?

1.3 Junior🔥 171 комментариев
#Python

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Метод Copy в Python

Copy — модуль Python, который предоставляет функции для создания копий объектов. Это критически важно при работе с данными в Data Science, особенно с pandas DataFrames и списками, так как Python работает с ссылками, а не с копиями значений.

Два типа копирования

В Python существует различие между поверхностным копированием (shallow copy) и глубоким копированием (deep copy).

1. Поверхностное копирование (Shallow Copy)

import copy

# Исходный список со вложенными структурами
original = [[1, 2, 3], [4, 5, 6]]

# Shallow copy
shallow = copy.copy(original)

# Изменяем элемент во вложенном списке
shallow[0][0] = 999

print(f"Original: {original}")  # [[999, 2, 3], [4, 5, 6]]
print(f"Shallow: {shallow}")    # [[999, 2, 3], [4, 5, 6]]

# Внешний список скопирован, но вложенные объекты указывают на те же адреса
print(f"Это один и тот же объект: {original[0] is shallow[0]}")  # True

2. Глубокое копирование (Deep Copy)

import copy

original = [[1, 2, 3], [4, 5, 6]]

# Deep copy
deep = copy.deepcopy(original)

# Изменяем элемент во вложенном списке
deep[0][0] = 999

print(f"Original: {original}")  # [[1, 2, 3], [4, 5, 6]]
print(f"Deep: {deep}")          # [[999, 2, 3], [4, 5, 6]]

# Это разные объекты
print(f"Это разные объекты: {original[0] is deep[0]}")  # False

Практические примеры в Data Science

1. Работа с Pandas DataFrames

import pandas as pd
import copy

# Создаём DataFrame
df_original = pd.DataFrame({A: [1, 2, 3], B: [4, 5, 6]})

# Неправильно: это просто ссылка
df_wrong = df_original
df_wrong.loc[0, A] = 999
print(df_original)  # Изменилось!

# Правильно: поверхностная копия
df_shallow = df_original.copy()
df_shallow.loc[1, A] = 999
print(df_original)  # Не изменилось

# Глубокая копия
df_deep = copy.deepcopy(df_original)
df_deep.loc[2, A] = 999
print(df_original)  # Не изменилось

2. Копирование параметров моделей

import copy
from sklearn.ensemble import RandomForestClassifier

# Создаём две модели с одинаковыми параметрами
model1 = RandomForestClassifier(n_estimators=100, random_state=42)
model2 = copy.deepcopy(model1)

# Теперь модели независимы
model1.n_estimators = 50
print(model2.n_estimators)  # Остаётся 100

3. Сохранение состояния конвейера обработки

import copy

# Состояние нормализации данных
original_params = {
    mean: [1.0, 2.0, 3.0],
    std: [0.5, 0.6, 0.7],
    features: [A, B, C]
}

# Сохраняем копию для использования в тестировании
test_params = copy.deepcopy(original_params)

# Изменяем параметры для обучения
original_params[mean][0] = 99

print(f"Original: {original_params[mean]}")
print(f"Test: {test_params[mean]}")  # [1.0, 2.0, 3.0]

Сравнение методов копирования

МетодОписаниеСкоростьИспользование
=Ссылка на объектМгновенноКогда нужна общая ссылка
.copy()Shallow copyБыстроDataframes, простые структуры
copy.copy()Shallow copyБыстроОбщий случай
copy.deepcopy()Deep copyМедленнееВложенные структуры

Когда использовать deep copy

import copy
import time

# Создаём большой вложенный словарь
big_dict = {data: list(range(1000000)), nested: {value: 42}}

# Shallow copy быстрее
start = time.time()
shallow = copy.copy(big_dict)
print(f"Shallow: {time.time() - start:.6f}s")

# Deep copy медленнее, но безопаснее
start = time.time()
deep = copy.deepcopy(big_dict)
print(f"Deep: {time.time() - start:.6f}s")

Лучшие практики

  • Используй .copy() для pandas DataFrames
  • Используй copy.deepcopy() для сложных вложенных структур
  • Избегай простого присваивания для изменяемых объектов
  • Помни о производительности при работе с большими данными

Понимание copy критически важно для предотвращения трудноуловимых ошибок в data science коде.

Что такое метод Copy в Python? | PrepBro