Как сделать копию списка 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 с сохранением очередности

Как копировать список Python

Чтобы скопировать исходный список в новый, нужно применить к последнему срез только с двоеточием, показывающим, что нам нужны все элементы первого списка. Смотрите пример:

lst1 = [‘1’, ‘2’, ‘3’] lst2 = lst1[:] print(lst2)

Результат выполнения кода:

С помощью метода copy

Сделать копию списка также возможно, применив к исходному объекту метод copy . Смотрите пример:

lst1 = [‘1’, ‘2’, ‘3’] lst2 = lst1.copy() print(lst2)

Результат выполнения кода:

Смотрите также

  • метод copy ,
    который копирует список

Зачем в Python есть два способа создания копии списка?

Возможно существуют более двух способов создания копии списка, кроме:

b = a[:] b = a.copy()

Но зачем нужно создавать два и более способов, когда легко можно обойтись всего одним способом?

Дополнение к вопросу:
Есть код:

a = [1 , 2, [3, 4]] b = a[:] c = a.copy() print(a) print(b) print(c) print() a[1] = 0 a[2][1] = 'xx' print(a) print(b) print(c)
[1, 2, [3, 4]] [1, 2, [3, 4]] [1, 2, [3, 4]] [1, 0, [3, 'xx']] [1, 2, [3, 'xx']] [1, 2, [3, 'xx']]

Почему так происходит – при изменении во вложенном списке с которого снята копия элементы меняются и в других списках, а отдельные элементы в скопированных списках не меняются?

  • Вопрос задан более трёх лет назад
  • 11464 просмотра

Комментировать
Решения вопроса 2
Сергей Горностаев @sergey-gornostaev Куратор тега Python
Седой и строгий

Для операции среза копирование списка — это побочный эффект, а создана она для другого.

По поводу дополнения: читать про поверхностное и глубокое копирование.

Ответ написан более трёх лет назад
Нравится 5 1 комментарий

Nivalis

Это не баг — это фича)

aRegius

Python Enthusiast

Приветствую, weranda.

. Почему так происходит – при изменении во вложенном списке с которого снята копия элементы меняются и в других списках, а отдельные элементы в скопированных списках не меняются.

Потому что [:], copy(), list() создают т.н. «поверхностные» копии. Используйте copy.deepcopy() для решения подобной проблемы:

>>> a = [1 , 2, [3, 4]] >>> import copy >>> b = copy.deepcopy(a) >>> a[2][1] = 156 >>> a [1, 2, [3, 156]] >>> b [1, 2, [3, 4]]

Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Ответы на вопрос 3

Почему так происходит – при изменении во вложенном списке с которого снята копия элементы меняются и в других списках, а отдельные элементы в скопированных списках не меняются?

Как мне кажется, нашел правильный ответ на этот вопрос. Операции a[:] и a.copy() — это операции поверхностного копирования, т.е. такого копирования, при котором создается новый объект (список в данном случае) и в него записываются ссылки на все вложенные объекты.
Операция = — это операция присваивания ссылки к объекту. Не копирование.

При первой операции: a[1] = 0 — происходит присваивание ссылки к новому объекту 0. В списках b, c при этом остались ссылки на старый объект 2. Почему ссылка к новому объекту? Потому что тип int — неизменяемый, при всех операциях присваивания с неизменяемыми типами происходит присваивание ссылки к новому объекту, а не изменение старого.
То есть:
a = 5
print(id(a)) # 4489501472
a = 2
print(id(a)) # 4489501376 — объект-то новый

При второй операции a[2][1] = ‘xx’ изменяется объект a[2] (а это список, изменяемый, поэтому ссылка на объект не изменилась, а изменился сам список). При копировании была скопирована ссылка на этот список a[2]. Список изменился, но ссылка осталась та же во всех переменных a, b, c.

P.S. лучше поздно, чем никогда :))

Копия списка в Python 1 мин для чтения

Python 3 - Обзор

Список — это тип данных Python, заключенный в квадратные скобки [] и содержащий элементы, разделенные запятыми. Значения списка могут относиться к разным типам данных. Индексирование списка начинается с нуля и может быть объединено и разделено на части. Поскольку иногда необходимо воссоздать объект, методы копирования чрезвычайно полезны. Язык Python предоставляет несколько вариантов для этого. Цель этого артефакта — продемонстрировать, как использовать технику копирования списка. Поскольку список широко используется, его копия также требуется.

Используя несколько встроенных операций, значения списка можно клонировать как новое значение списка. Вам может потребоваться дублировать элементы списка в некоторых процедурах Python. Действительно, список копирования — это метод в Python, который используется для списков, содержащих несколько переменных/значений. Основная функция функции копирования — реплицировать элементы существующего списка в только что сформированный пустой список. Эта статья посвящена копированию списка в другой список. У нас есть две иллюстрации, которые помогут нашим пользователям скопировать список.

Примечание
Используйте Spyder IDE в Windows 10, чтобы реализовать следующие примеры.

Пример 1: Метод Copy()

Copy() — это новый метод в списках Python, выпущенных в Python 3. Он дублирует список в какой-то другой список. Следует иметь в виду, что Python 2 его не поддерживает. Функция copy() — самый простой способ скопировать список Python. Мы можем визуализировать состояние, при котором нам нужно продублировать список. Знак равенства = может использоваться для дублирования списка. С другой стороны, новый список будет связан со старым. Если вы редактируете исходный список, новый список также будет обновлен. Элемент в новом списке аналогичен элементу в предыдущем списке.

Функция list copy() генерирует копию исходного списка. Для функции copy() нет параметров. На этой следующей иллюстрации у нас есть список «x», в котором мы также указали некоторые целые числа и строки. После этого мы создали другую переменную «new_x», в которую мы скопируем содержимое исходного списка. Оператор печати будет выполнен после того, как скопированный список будет распечатан на экране. Код метода copy() показан на добавленном изображении и в текстовой форме:

X = [‘Привет’, 1, 2, 3] New_x = x.copy() Print( ‘Копирование списка:’ , new_x)

Читать Настройка прокси-соединения с системой на Java

Пример 2

Эта иллюстрация немного отличается от предыдущей. Здесь у нас есть список под названием «Список1», в котором указаны значения целочисленного типа. После этого мы присвоили другую переменную «new_List1» переменной «List1». Следуя этому шаблону, мы использовали функцию добавления, чтобы добавить значение как в старые, так и в скопированные строки. Здесь указан символ «а». Последнее, что мы здесь использовали, — это два оператора печати. Они оба будут отображать новый список, а также старый список. Код для метода copy() показан в добавленном изображении и текстовой форме:

List1 = [1, 2, 3, 4, 5] new_List1 = List1 new_List1.append('a') print('Новый список:', new_List1) print('Старый список:', List1)

Также можно увидеть добавленный символ, а также новый и старый список. Вывод правильный, как и в предыдущем программном коде.

Заключение

В этой статье мы рассмотрели два метода создания копии списка в Python. Мы узнали, как использовать функцию copy() и присваивать значение переменной с помощью оператора присваивания точно так же, как при присвоении значения переменной. Мы предоставили два разных примера, касающихся метода копирования, а в другом также есть метод добавления. Теперь вы знаете необходимую информацию для создания копии списка в Python. Однако, читатели, это еще не конец учебного процесса. Настоятельно советую всем просмотреть приведенные выше примеры и попробовать применить их на практике.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

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

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