copy()

Содержание
Введение
Пример
Применение
Похожие статьи

Введение

Теорию о том что такое глубокая (deep) и неполная (shallow) копии вы можете изучить в статье «Типы копирования»

Исходный код функции можно изучить здесь

"""Общие операции копирования (мелкого и глубокого). Краткое описание интерфейса: импортировать копию x = copy.copy(y) # сделать неглубокую копию y x = copy.deepcopy(y) # создайте глубокую копию y Для ошибок, характерных для конкретного модуля, скопируйте.Возникает ошибка. Разница между мелким и глубоким копированием актуальна только для составных объектов (объектов, которые содержат другие объекты, такие как списки или экземпляры классов). - Неглубокая копия создает новый составной объект, а затем ( насколько это возможно) вставляет в него * те же объекты*, что и оригинал. - Глубокая копия создает новый составной объект, а затем рекурсивно вставляет в него *копии* объектов, найденных в оригинале. При операциях глубокого копирования часто возникают две проблемы, которых нет при операциях неглубокого копирования: a) рекурсивные объекты (составные объекты, которые прямо или косвенно содержат ссылку на самих себя) могут вызывать рекурсивный цикл б) поскольку глубокое копирование копирует * все*, оно может копировать слишком много, например административные структуры данных, которые должны использоваться совместно даже между копиями Операция глубокого копирования в Python позволяет избежать этих проблем за счет: a) сохранение таблицы объектов, уже скопированных в течение текущего пропуск для копирования б) разрешение определяемым пользователем классам переопределять операцию копирования или скопированный набор компонентов Эта версия не копирует такие типы, как модуль, класс, функция, метод, ни трассировку стека, ни фрейм стека, ни файл, сокет, окно, ни любые подобные типы. Классы могут использовать те же интерфейсы для управления копированием, которые они используют для управления травлением: они могут определять методы, называемые __getinitargs__(), __getstate__() и __setstate__(). Смотрите документацию к модулю "pickle" для получения информации об этих методах. """

Синтаксис

copy(object)

Пример

import copy z = [2] y = z x = copy.copy(z) z.append(3) print("z =", z) print("y =", y) print("x =", x)

z = [2, 3] y = [2, 3] x = [2]

Смысл в том, что список x не изменился так как copy() создала новый объект а не просто ссылку на старый.

Применение

Рассмотрим функцию modify() из статьи про Объекты в Python

m = [0, 1, 2] print(f"m = {m}") def modify(k): k.append(3) print("k =", k) print("\nmodify(m)\n") modify(m) print(f"m = {m}") print("\nNo copy of m is made\n") print("\nmodify(m)\n") modify(m) print(f"m = {m}")

m = [0, 1, 2] modify(m) k = [0, 1, 2, 3] m = [0, 1, 2, 3] No copy of m is made modify(m) k = [0, 1, 2, 3, 3] m = [0, 1, 2, 3, 3]

Функция modify() работает с тем же объектом, поэтому его значения изменяются.

Изменить поведение функции modify() можно с помощью функции copy()

import copy m = [0, 1, 2] print(f"m = {m}") def modify(k): s = copy.copy(k) s.append(3) print("s =", s) print("\nmodify(m)\n") modify(m) print(f"m = {m}") print("\nNo copy of m is made\n") print("\nmodify(m)\n") modify(m) print(f"m = {m}")

m = [0, 1, 2] modify(m) s = [0, 1, 2, 3] m = [0, 1, 2] No copy of m is made modify(m) s = [0, 1, 2, 3] m = [0, 1, 2]

Похожие статьи
Python
*args **kwargs
sys.argv: аргументы командной строки
Лямбда функции
Функции первого класса
Замыкания
Декораторы
enumerate()
Кэширование
if, elif, else
Циклы
Методы
enum
Генераторы
Генераторы: Maintaining State
Встроенные фукнции: all()zip()
dir()
id()
Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@eth1.ru если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Хотите поддержать сайт материально
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......