Как взять значение из одной переменной в другую, но не делать ссылку на неё?

У меня есть список, значение которого берёт другой список:

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

Для получения "мелкой" копии (достаточной в вашем случае) есть три равноценных способа:

  1. objects2 = objects.copy()
  2. objects2 = list(objects)
  3. objects2 = objects[:]

Однако, лучше всего использовать .copy(), как наиболее понятный способ - мы делаем копию, и это видно по названию используемого метода. "Явное лучше не явного".

Для получения "глубокой" копии (когда в списке не значения, а объекты) нужно использовать метод copy.deepcopy:

from copy import deepcopy

objects2 = deepcopy(objects)
→ Ссылка