Вот несколько способов скопировать список в Python:
new_list = original_list[:]
(создает поверхностную копию)copy()
: new_list = original_list.copy()
(создает поверхностную копию)list()
: new_list = list(original_list)
(создает поверхностную копию)copy.deepcopy()
: new_list = copy.deepcopy(original_list)
(создает глубокую копию, рекурсивно копируя все объекты внутри списка)Важно понимать разницу между поверхностной и глубокой копией, особенно при работе со списками, содержащими изменяемые объекты.
Существует несколько способов скопировать список в Python, каждый из которых имеет свои особенности, касающиеся того, создается ли глубокая или поверхностная копия.
Поверхностная копия создает новый список, но элементы внутри этого списка являются ссылками на оригинальные элементы. Это означает, что если вы измените элементы внутри скопированного списка (если эти элементы изменяемые, например, другие списки или словари), изменения отразятся и в оригинальном списке.
copy()
:original_list = [1, 2, [3, 4]]
copied_list = original_list.copy() # Создает поверхностную копию
copied_list[0] = 5 # Изменяет элемент в скопированном списке (оригинал не меняется)
copied_list[2][0] = 6 # Изменяет элемент во вложенном списке (оригинал меняется)
print(f"Original list: {original_list}") # Output: Original list: [1, 2, [6, 4]]
print(f"Copied list: {copied_list}") # Output: Copied list: [5, 2, [6, 4]]
original_list = [1, 2, [3, 4]]
copied_list = original_list[:] # Создает поверхностную копию
# Остальное как в примере выше
list()
:original_list = [1, 2, [3, 4]]
copied_list = list(original_list) # Создает поверхностную копию
# Остальное как в примере выше
Глубокое копирование создает новый список и рекурсивно копирует все объекты, найденные в оригинальном списке. Это означает, что скопированный список полностью независим от оригинального, и изменения в одном списке не повлияют на другой.
copy
и функции deepcopy()
:import copy
original_list = [1, 2, [3, 4]]
copied_list = copy.deepcopy(original_list) # Создает глубокую копию
copied_list[0] = 5 # Изменяет элемент в скопированном списке (оригинал не меняется)
copied_list[2][0] = 6 # Изменяет элемент во вложенном списке (оригинал не меняется)
print(f"Original list: {original_list}") # Output: Original list: [1, 2, [3, 4]]
print(f"Copied list: {copied_list}") # Output: Copied list: [5, 2, [6, 4]]
Важно понимать разницу между поверхностным и глубоким копированием, чтобы избежать неожиданных побочных эффектов при работе со списками.