Почему этот код изменяет только некоторые элементы списка, а не другие? - PullRequest
0 голосов
/ 30 мая 2019

Я не понимаю, почему результат следующего кода [1,[2,5]], а не [3,[2,5]]. Почему элемент в подсписке изменился, а элемент вне подсписка - нет?

Я новичок в Python, поэтому, возможно, я не вижу чего-то, что должно быть очень очевидным Я читал о глубоких и мелких копиях, но это не помогло.

a = [1,[2,3]]
b = a[:]
a[0] = 3
a[1][1] = 5
print(b)

Я создал срез списка в строке 2. Но так как у него нет начальных или конечных значений, срез равен всему списку, верно? Тогда почему 3 меняется на 5, а 1 остается прежним?

1 Ответ

0 голосов
/ 30 мая 2019

Потому что в Python каждый список является независимым объектом. Вы можете сделать глубокое копирование, используя модуль «copy» для решения этой конкретной проблемы.

import copy
a = [1,[2,3]]
b = copy.deepcopy(a)
a[0] = 3
a[1][1] = 5
print(b)

Результат: [1, [2, 3]]

...