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]

Banner image

Article author: Andrei Olegovich

Похожие статьи
Python
*args **kwargs
sys.argv: аргументы командной строки
Лямбда функции
Функции первого класса
Замыкания
Декораторы
Кэширование
if, elif, else
Циклы
Методы
Итерация
Генераторы
Генераторы: Maintaining State
Встроенные фукнции: all() … zip()

Search this site

Subscribe to Telegram channel @aofeed to follow new articles and updates to old ones

Go to channel

@aofeed

Ask a question in the Telegram group

@aofeedchat

Contacts and cooperation:
I recommend our hosting beget.ru
Write to info@urn.su if you:
1. Want to write an article for our site or translate an article into your native language.
2. Want to place thematically relevant ads on the site.
3. Ads on my site pass maximum censorship. If you see an ad block unsuitable for school-age children, shocking or misleading - please contact us by e-mail
4. Found a mistake, inaccuracy, bug, etc. on the site. ... .......
5. Articles can be shared on social media by clicking a network icon: