@PavelMos

Почему изменяется оригинальный список при создании из его элементов нового списка?

Был такой код в одном из вопрос, как преобразовать список. В примере список перебирается, но не изменяется. Почему возникают измененения ? почему изменяется объект, куда
PyCharm Windows, питон 3.8

n= [['a','b','c'],1,2,4,5,['x','z','w'],6,7,['d','e','f'],8,9,10]
x = []
for i in range(len(n)):
    if type(n[i]) is list:
        x.append(n[i])
        mark = len(x) - 1
    elif type(n[i]) is int:
        x[mark].append(n[i])
print(x)
print(n)
[['a', 'b', 'c', 1, 2, 4, 5], ['x', 'z', 'w', 6, 7], ['d', 'e', 'f', 8, 9, 10]]
[['a', 'b', 'c', 1, 2, 4, 5], 1, 2, 4, 5, ['x', 'z', 'w', 6, 7], 6, 7, ['d', 'e', 'f', 8, 9, 10], 8, 9, 10]
  • Вопрос задан
  • 101 просмотр
Пригласить эксперта
Ответы на вопрос 1
SoreMix
@SoreMix Куратор тега Python
yellow
В x[mark].append(n[i]) список не копируется в список x, а создается ссылка на объект. В итоге любое изменение этого объекта меняет его везде.

Например, если взять id первого вложенного списка print(id(n[0])) и списка в x print(id(x[mark])), то id у них будут одинаковые, а значит изменение одного повлечет за собой изменение другого. Если нужно скопировать полностью список, создав новый объект, то используют deepcopy
import copy

a = [12,[1,2]]
b = copy.deepcopy(a)


https://medium.com/@meghamohan/mutable-and-immutab...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы