Как создать новый список из текущего с новым id

a =['q','w','e','r','t','y']
b = a
b.pop(2)
print(a)
>>>['q', 'w', 'r', 't', 'y']

как сделать что бы программа работала только со списком Б? Я понимаю, почему так происходит: по факту и А и Б ссылаются на элемент с одним ID и работают с ним. А как это обойти?


Ответы (1 шт):

Автор решения: icYFTL

Используйте функцию copy библиотеки copy для поверхностного копирования.

from copy import copy
a = [1,2,3,4]
b = copy(a)
b.pop(1)
print(b)  # 1, 3, 4
print(a)  # 1, 2, 3, 4

Если нужно скопировать сложный объект, то тут уже необходимо полное копирование, т.е. функция deepcopy:

from copy import copy
a = [[1,2,3], 1]
b = copy(a)  # Wrong
b[0][1] = 999
print(b)  # [[1, 999, 3], 1]
print(a)  # [[1, 999, 3], 1]
from copy import deepcopy
a = [[1,2,3], 1]
b = deepcopy(a)  # Correct
b[0][1] = 999
print(b)  # [[1, 999, 3], 1]
print(a)  # [[1, 2, 3], 1]
→ Ссылка