Как взять значение из одной переменной в другую, но не делать ссылку на неё?
У меня есть список, значение которого берёт другой список:
objects = [1, 2, 3, 4, 5]
objects2 = objects
и я хочу чтобы второй не ссылался на первый
print(objects, objects2)
# вывод: [1, 2, 3, 4, 5] [1, 2, 3, 4, 5]
#изменение
objects2.remove(3)
print(objects, objects2)
# вывод:[1, 2, 4, 5] [1, 2, 4, 5]
#ид
print(id(objects), id(objects2))
# вывод: 1416642614272 1416642614272
Ответы (3 шт):
Автор решения: Алексей Р
→ Ссылка
Используйте .copy()
objects2 = objects.copy()
Если объект вложенный/составной и нужна глубокая копия, то deepcopy
Автор решения: Alex Titov
→ Ссылка
Только для списка без вложений objects2 = objects[:] Ну а для других объектов, естественно, copy/deepcopy.
Автор решения: CrazyElf
→ Ссылка
Для получения "мелкой" копии (достаточной в вашем случае) есть три равноценных способа:
objects2 = objects.copy()objects2 = list(objects)objects2 = objects[:]
Однако, лучше всего использовать .copy(), как наиболее понятный способ - мы делаем копию, и это видно по названию используемого метода. "Явное лучше не явного".
Для получения "глубокой" копии (когда в списке не значения, а объекты) нужно использовать метод copy.deepcopy:
from copy import deepcopy
objects2 = deepcopy(objects)