Рубрики
Без рубрики

Как скопировать список списков в Python (неглубоко против глубокой)?

Python – самый популярный язык программирования в мире. Наиболее важной структурой данных в самом важном языке программирования – это структура данных списка. В этом руководстве вы узнаете, как скопировать список списков. Но будьте осторожны – просто копирование вашего списка, возможно, не делать то, что вы ожидали, это делать. Давайте погрузиться … Как скопировать список списков в Python (неглубоко против глубокого)? Читать далее “

Автор оригинала: Chris.

Python – самый популярный язык программирования в мире. Наиболее важной структурой данных в самом важном языке программирования – это структура данных списка.

В этом руководстве вы узнаете, как скопировать список списков. Но будьте осторожны – просто копирование вашего списка, возможно, не делать то, что вы ожидали, что это делать. Давайте погрузимся в важное различие: мелкие против глубоких копий Отказ

Короткий ответ:

  • Чтобы создать неглубокую копию списка списков, используйте list.copy () Способ, который создает новый внешний список с копированными ссылками на одинаковые внутренние списки.
  • Чтобы создать глубокую копию с копированными внутренними списками, импортируйте скопировать Библиотека и звонок copy.deepcopy (список) скопировать как внутренние, так и внешние списки.

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

Метод 1: список Python Copy

Прежде чем вы действительно можете понять Копировать () Способ в Python, вы должны понимать концепцию «мелкой копии».

На объектно-ориентированных языках, таких как Python, все – это объект. Список – это объект, а элементы в списке тоже объекты. Неглубокая копия списка создает новый объект списка – копия – но она не создает новых элементов списка, но просто копирует ссылки на эти объекты.

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

В Python, list.copy () Способ производит только мелкую копию, которая имеет гораздо более быструю сложность выполнения.

Вот пример, показывающий точный этот сценарий:

lst = [[1, 0], [2, 2], [0, 0]]
lst_copy = lst.copy()
lst_copy[2].append(42)
print(lst[2])

Изменение третьего элемента списка скопированного списка влияет на элемент третьего списка исходного списка. Таким образом, вывод:

[0, 0, 42]

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

Намекать : Если вы копируете список списков, используя list.copy () Способ, осознайте, что любые изменения, которые вы выполняете в списке в скопированном списке списков, видно в исходном списке.

Если вы не в порядке с этим, проверьте следующий раздел о глубоких копиях списков Python:

Метод 2: Список Python Скопируйте глубокий

Поняв концепцию неглубокой копии, теперь легко понять концепцию глубокой копии. Неглубокая копия копирует ссылки на элементы списка. Глубокая копия копирует сами элементы списка, которые могут привести к высокому рекурсивному поведению, потому что элементы списка могут быть спискими самими собой, которые необходимо скопировать глубоко и так далее.

Вот простая глубокая копия того же списка, как показано ранее:

В отличие от мелкой копии, список [1, 2] копируется отдельно для глубокого списка копирования. Если один изменяет этот вложенный список в исходном списке, изменение не будет видно в глубокой копии. (Потому что вложенный список глубокого списка копирования является независимым объектом в памяти.)

Обратите внимание, что в глубокой копии строковый объект не должен быть скопирован. Почему? Поскольку строки неизменяются, поэтому вы не можете их изменить (и, таким образом, не будут грязных «побочных эффектов», видимых другими копиями списка, указывающего на тот же объект в памяти).

Чтобы получить глубокую копию в Python, импортируйте Скопировать модуль и использовать Deepcopy () Метод:

import copy
lst = [[1, 0], [2, 2], [0, 0]]
lst_copy = copy.deepcopy(lst)
lst_copy[2].append(42)
print(lst[2])
# [0, 0]

Опять же, визуализируйте поток выполнения следующего фрагмента кода прямо здесь, в вашем браузере, нажав «Далее»:

Как скопировать список Python (альтернативы)?

Скажи, вы хотите скопировать Список Отказ Какие варианты есть?

list.copy () Возвращает неглубокую копию списка.
Import Copy Copy.deepcopy (список) Импортируйте модуль копирования и использует его способ для создания глубокой копии списка.
список[:] Используйте Slicing с индексами по умолчанию для создания неглубокой копии списка.
Список (х) Используйте список встроенного списка (…), чтобы создать неглубокую копию списка X.
[EL для EL в LST] Используйте список пометков для создания неглубокой копии исходного списка LST.

Нарезка относится к самым быстрым методам (очень грязные эталон здесь ). Если вам нужно обновить навыки нарезки Python, вот учебник по блогу Finxter:

Статьи по Теме:

  • Введение в нарезку в Python
  • Копировать список Python (полный учебник)
  • Методы списка чит

Куда пойти отсюда?

Достаточно теории, давайте познакомимся!

Чтобы стать успешным в кодировке, вам нужно выйти туда и решать реальные проблемы для реальных людей. Вот как вы можете легко стать шестифункциональным тренером. И вот как вы польские навыки, которые вам действительно нужны на практике. В конце концов, что такое использование теории обучения, что никто никогда не нуждается?

Практические проекты – это то, как вы обостряете вашу пилу в кодировке!

Вы хотите стать мастером кода, сосредоточившись на практических кодовых проектах, которые фактически зарабатывают вам деньги и решают проблемы для людей?

Затем станьте питоном независимым разработчиком! Это лучший способ приближения к задаче улучшения ваших навыков Python – даже если вы являетесь полным новичком.

Присоединяйтесь к моему бесплатным вебинаре «Как создать свой навык высокого дохода Python» и посмотреть, как я вырос на моем кодированном бизнесе в Интернете и как вы можете, слишком от комфорта вашего собственного дома.

Присоединяйтесь к свободному вебинару сейчас!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.