Как сделать копию списка python
Перейти к содержимому

Как сделать копию списка python

  • автор:

Скопируйте или клонируйте список Python

В этом посте мы обсудим, как скопировать или клонировать список в Python.

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

1. Использование copy() функция

Стандартное решение для возврата неглубокой копии списка — встроенный copy() функция. Эта функция доступна для списков, наборов и словарей.

Артём Санников

Данная книга является руководством для начинающих специалистов в области анализа и обработки данных. В книге рассматривается язык SQL и его процедурное расширение PL/SQL от компании Oracle.

Главная › Языки программирования › Python › Списки › Копирование списка в Python

Копирование списка в Python

Копирование списков очень удобная вещь, так как на основе одного списка можно создать другой за считанные секунды. Чтобы скопировать список, создайте срез, включающий весь исходный список без указания первого и последнего индекса [:] . Данная конструкция создаёт срез, который начинается с первого элемента и заканчивается последним, в результате этого создаётся копия списка.

# Текущий список users = ["Иванов", "Петров", "Сидоров"] # Создаём новый список и создаём срез для копирования старого списка new_users = users[:] # Выводим старый список print("Это старый список фамилий:") print(users) # Выводим новый список print("\nЭто новый список фамилий:") print(new_users) # Финальный результат в консоли Это старый список фамилий: ['Иванов', 'Петров', 'Сидоров'] Это новый список фамилий: ['Иванов', 'Петров', 'Сидоров']

Записи по теме

  • Проверка отсутствия значения в списке Python
  • Проверка вхождения значения в список Python
  • Перебор содержимого среза списка в Python
  • Срез для списка в Python
  • Генератор списков в Python
  • Создание числового списка при помощи range() в Python
  • Перебор всего списка в Python
  • Определение длины списка в Python

Метод list.copy() в Python, копия списка

Операция позволяет создавать мелкую копию последовательности. Метод sequence.copy() создает мелкую копию последовательности sequence .

Операция копирования последовательности sequence эквивалентна выполнению выражения sequence[:] .

Метод sequence.copy() был включен для обеспечения согласованности с интерфейсами изменяемых контейнеров, которые не поддерживают срезы, такие как dict и set . copy() не входит в состав ABC collections.abc.MutableSequence , но большинство классов изменяемых последовательностей предоставляют его.

Эта операция поддерживаются изменяемыми типами последовательностей.

Смотрите так же модуль copy , что бы сделать глубокую копию списка, а так же различия между глубокой и неглубокой копией.

Примеры копирования списка.

  • Общие примеры копирования списка;
  • Копирование списка срезом;
Общие примеры.
>>> x = [3, 6, 9, 12, 15, 18] >>> y = x.copy() >>> y[2] = 20000 >>> x # не изменился [3, 6, 9, 12, 15, 18] >>> y # Измененная копия x [3, 6, 20000, 12, 15, 18] 
Альтернативная операция создания копии списка.
# Альтернативная операция создания копии >>> z = x[:] >>> z[-1] = 15000 >>> x # не изменился [3, 6, 9, 12, 15, 18] >>> z # Измененная копия x [3, 6, 9, 12, 15, 15000] 
  • ОБЗОРНАЯ СТРАНИЦА РАЗДЕЛА
  • Изменение/замена элемента списка по индексу
  • Изменение части списка операцией среза
  • Изменение списка срезом c заданным шагом
  • Удаление части списка операцией среза
  • Удаление части списка по срезу с заданным шагом
  • Метод list.append(), добавляет значение в конец списка
  • Метод list.clear(), очищает список
  • Метод list.copy(), копия списка
  • Метод list.extend(), расширяет список другой последовательностью
  • Расширение списка его содержимым
  • Метод list.insert(), вставить элемент по индексу
  • Метод list.pop(), получение с удалением элемент списка
  • Метод list.remove(), удаление элемента списка по значению
  • Метод list.reverse(), разворачивает элементы списка
  • Удаление элемента списка по индексу
  • Удаление дубликатов из списка Python с сохранением очередности

Модуль copy — поверхностное и глубокое копирование объектов

Python 3 логотип

Операция присваивания не копирует объект, он лишь создаёт ссылку на объект. Для изменяемых коллекций, или для коллекций, содержащих изменяемые элементы, часто необходима такая копия, чтобы её можно было изменить, не изменяя оригинал. Данный модуль предоставляет общие (поверхностная и глубокая) операции копирования.

copy.copy(x) — возвращает поверхностную копию x.

copy.deepcopy(x) — возвращает полную копию x.

Исключениеcopy.error — возникает, если объект невозможно скопировать.

Разница между поверхностным и глубоким копированием существенна только для составных объектов, содержащих изменяемые объекты (например, список списков, или словарь, в качестве значений которого — списки или словари):

  • Поверхностная копия создает новый составной объект, и затем (по мере возможности) вставляет в него ссылки на объекты, находящиеся в оригинале.
  • Глубокая копия создает новый составной объект, и затем рекурсивно вставляет в него копии объектов, находящихся в оригинале.

Для операции глубокого копирования часто возникают две проблемы, которых нет у операции поверхностного копирования:

  • Рекурсивные объекты (составные объекты, которые явно или неявно содержат ссылки на себя) могут стать причиной рекурсивного цикла;
  • Поскольку глубокая копия копирует всё, она может скопировать слишком много, например, административные структуры данных, которые должны быть разделяемы даже между копиями.

Функция deepcopy решает эти проблемы путем:

  • Хранения «memo» словаря объектов, скопированных во время текущего прохода копирования;
  • Позволения классам, определенным пользователем, переопределять операцию копирования или набор копируемых компонентов.

Этот модуль не копирует типы вроде модулей, классов, функций, методов, следа в стеке, стековых кадров, файлов, сокетов, окон, и подобных типов.

Поверхностная копия изменяемых объектов также может быть создана методом .copy() у списков (начиная с Python 3.3), присваиванием среза (copied_list = original_list[:]), методом .copy() словарей и множеств. Создавать копию неизменяемых объектов (таких, как, например, строк) необязательно (они же неизменяемые).

Для того, чтобы определить собственную реализацию копирования, класс может определить специальные методы __copy__() и __deepcopy__(). Первый вызывается для реализации операции поверхностного копирования; дополнительных аргументов не передается. Второй вызывается для реализации операции глубокого копирования; ему передается один аргумент, словарь memo. Если реализация __deepcopy__() нуждается в создании глубокой копии компонента, то он должен вызвать функцию deepcopy() с компонентом в качестве первого аргумента и словарем memo в качестве второго аргумента.

Для вставки кода на Python в комментарий заключайте его в теги

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *