Меняет ли обмен значение в списке ссылку на обмен в Python3? - PullRequest
0 голосов
/ 14 февраля 2019

Мне интересно, если обмен значениями в элементах списка, как показано ниже, просто поменять значение или ссылочный адрес.

a = [1, 2]

a[0], a[1] = a[1], a[0]

print(a) # [2, 1]

Под капотом механизма Python3 мне интересно, какой из приведенных ниже эквивалентен приведенному выше коду.

Case1: вставка самого значения

a[0], a[1] = 2, 1

Case2: swapссылка на этот элемент (поэтому изменяются только ссылки, но не само значение)

a[0], a[1] = (address of 2nd element), (address of 1st element)

1 Ответ

0 голосов
/ 14 февраля 2019

В Python память назначается для значений , а не переменных.Вы можете проверить это с помощью ниже.

>>> a = 1
>>> b = 1
>>> hex(id(a))
'0x102ecdbf0'
>>> hex(id(b))
'0x102ecdbf0'
>>> x = [0,1]
>>> hex(id(x[0]))
'0x102ecdbd0'
>>> hex(id(x[1]))
'0x102ecdbf0'
>>> x[0],x[1] = x[1],x[0]
>>> hex(id(x[0]))
'0x102ecdbf0'
>>> hex(id(x[1]))
'0x102ecdbd0'

Здесь a, b, x [1] имеют один и тот же адрес, так как значение одинаково.

Таким образом, все переменные, указывающие на одно и то жезначение будет иметь тот же адрес памяти.После изменения значения переменной переменная сопоставляется с адресом нового значения надлежащим образом.

Для вашего случая это может рассматриваться как обмен ссылками .

...