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

Список изменяется после назначения – как клонировать или скопировать его?

Проблема: Если вы назначаете объект списка к новой переменной с использованием, любая модификация для New_List меняет Old_List. В чем причина этого и как вы можете клонировать или скопировать список, чтобы предотвратить эту проблему? Пример: Давайте рассмотрим следующий пример. Old_List = [‘Alice’, ‘bob’, ‘carl’] new_list.append (42) print (old_list) … Список изменений после назначения – как клонировать или скопировать его? Прочитайте больше “

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

Проблема : Если вы назначаете объект списка к новой переменной, используя new_list , любая модификация на new_list изменения Old_List Отказ Какова причина этого и как вы можете клонировать или копировать Список Чтобы предотвратить эту проблему?

Пример : Давайте рассмотрим следующий пример.

old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list
new_list.append(42)
print(old_list)
# ['Alice', 'Bob', 'Carl', 42]

Добавление элемента к new_list также модифицирует оригинальный список Old_List Отказ Таким образом, Old_List Сейчас четыре элемента – даже если вы не изменили его напрямую.

Объяснение

Эта проблема одновременно модифицирования «двух» списков возникает, потому что у вас нет двух списков, но только один.

В Python все это объект. Вы создаете новый объект списка [«Алиса», «Боб», «Карл»] которые проживают в памяти вашей машины. Обе имена переменной new_list и Old_List Укажите на тот же объект в памяти – если вы измените один, вы также измените другое!

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

Упражнение : Визуализируйте, как возникает проблема, нажав «Далее».

Вы понимаете источник проблемы? Отлично, давайте погрузимся в решения, начиная с краткого обзора!

Обзор решения

Вы можете увидеть все три решения, обсуждаемые в этом руководстве в нашей интерактивной оболочке Python:

Упражнение : Измените исходный список. Все три метода все еще создают одинаковый выход?

Далее вы узнаете о каждом методе более подробно!

Метод 1: нарезка

Самый простой способ создания неглубокой копии списка Python – это нарезка:

# Method 1: Slicing
old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list[:]
new_list.append(42)
print(new_list)
# ['Alice', 'Bob', 'Carl']

Операция нарезки Old_List [:] Создает новый список, поэтому переменные new_list и Old_List Теперь укажите разные объекты в памяти. Если вы измените один, другой не меняется.

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

Соответствующее руководство : Введение в нарезку в Python

Метод 2: копия

Альтернатива – использовать list.copy () Метод, который создает неглубокую копию списка.

# Method 2: Copy
old_list = ['Alice', 'Bob', 'Carl']
new_list = old_list.copy()
new_list.append(42)
print(old_list)
# ['Alice', 'Bob', 'Carl']

list.copy () Метод копирует все Список элементы в новый список. Новый список – это возвращаемое значение метода. Это неглубокая копия – вы копируете только ссылки на объект на элементы списка, а не сами объекты.

Результат такой же, как метод нарезки: у вас есть две переменные, указывающие на два разных объекта списка в памяти.

Вы можете узнать больше о list.copy () Метод в моем подробном руководстве в блоге и следующем видео:

Похожие учебники: Python List.Copy () [Ultimate Guide]

Способ 3: Понимание списка

Третий способ решить проблему двух списков, указывающих на тот же объект в памяти, является способом понимания списка для создания новых списков.

# Method 3: List Comprehension
old_list = ['Alice', 'Bob', 'Carl']
new_list = [x for x in old_list]
new_list.append(42)
print(old_list)
# ['Alice', 'Bob', 'Carl']

Понимание списка является компактным способом создания списков. Простая формула – [Выражение + контекст] Отказ

  • Выражение: Что делать с каждым элементом списка?
  • Контекст: Какие элементы для выбора? Контекст состоит из произвольного количества для и Если заявления.

Вы можете наблюдать за учебным пособием видео и читать через связанную статью в блоге, чтобы узнать больше об этом!

Похожие учебники: Введение в список в списке

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

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

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

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

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

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

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

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

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

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

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