Копирование в питоне - PullRequest
0 голосов
/ 04 мая 2018

Может кто-нибудь объяснить, почему это происходит?

>>> A = [1,[2,3],4] 
>>> B = A[:]
>>> B[0] = 'x'
>>> B
['x',[2,3],4]
>>>A
[1,[2,3],4]
>>> B[1][0] = 'y'
>>> B
['x',['y',3],4]
>>> A
[1,['y',3],4]

В конце, когда мы попросили вернуть A, мы должны получить [1, [2,3], 4] в качестве ответа, верно? как мы создали отдельную копию для B.

1 Ответ

0 голосов
/ 04 мая 2018

Списки являются ссылками по умолчанию в Python. Когда вы присваивали B = A[:], вы пытались создать копию A. Это работает, как вы ожидали для нормальных значений. Но второй элемент A, в свою очередь, представляет собой другой список (то есть [2,3]), который, в свою очередь, является еще одной ссылкой.

Другими словами, думай об этом так B = A[:] это как сказать

B = []
B[0]=A[0] # here A[0] = 1
B[1]=A[1] # here A[1] is a reference to [2,3]
......

Таким образом, второй элемент B и A является ссылкой на один и тот же Список.

...