Списки. Передача ссылки и передача копии на Python

Если один список является вложенным в другой, то этого списка, через переменную, повлечет за собой его изменение в том списке, куда он был вложен. Во второй строке кода в b записывается не значение, связанное с a, а ссылка. В результате на список [1, 2, 3, 4, 5] ссылаются из двух мест: из a и из b[2]. Изменять этот список можно через любую ссылку.

>>> a = [1, 2, 3, 4, 5]
>>> b = [10, 20, a, 30, 40]
>>> a.append(6)
>>> b
[10, 20, [1, 2, 3, 4, 5, 6], 30, 40]
>>> b[2][0:0] = [0]
>>> a
[0, 1, 2, 3, 4, 5, 6]

Если требуется вложить в список копию другого списка, то можно сначала взять срез от начала до конца списка. Операция среза копирует данные.

>>> a = [1, 2, 3, 4, 5]
>>> b = [10, 20, a[:], 30, 40]
>>> b
[10, 20, [1, 2, 3, 4, 5], 30, 40]
>>> a.append(6)
>>> b
[10, 20, [1, 2, 3, 4, 5], 30, 40]

Еще пример присваивания ссылки на данные, а не копии данных. Это особенность списков и словарей в языке Python.

>>> b
[10, 20, [1, 2, 3, 4, 5, 6], 30, 40]
>>> c = b
>>> del b[0]
>>> b
[20, [1, 2, 3, 4, 5, 6], 30, 40]
>>> c
[20, [1, 2, 3, 4, 5, 6], 30, 40]

Вышеописанное не касается таких случаев:

>>> a = [1, 2, 3, 4, 5]
>>> b = [10, 20]
>>> c = a + b
>>> c
[1, 2, 3, 4, 5, 10, 20]
>>> a[0] = 100
>>> c
[1, 2, 3, 4, 5, 10, 20]
>>> a
[100, 2, 3, 4, 5]

Здесь a и b уже никак не связаны c переменной c. Результат сложения списков записывается в отдельную область памяти.

Оцените статью
( Пока оценок нет )
Поделиться с друзьями
Python для начинающих
Подписаться
Уведомить о
guest
0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x