0

Есть такая последовательность команд:

>>> a = [1,2,3,4,5]
>>> b = a
>>> b.reverse()
>>> a
[5, 4, 3, 2, 1]
>>> b
[5, 4, 3, 2, 1]

Почему список a тоже переворачивается вместе с b?

Ведь по нормальной человеческой логике a должен остаться в прежнем значении

diralik
  • 9,395

3 Answers3

3

Операция b = a не копирует список, а просто после нее две переменных указывают на один и тот же объект (это можно проверить с помощью оператора is: выражение a is b вернет True, т.е. объекты совпадают). После реверса в обеих переменных видим один и тот же инвертированный список.

Если нужно получить инвертированную копию списка в другой переменной, то можно воспользоваться функцией reversed():

>>> a = [1,2,3,4,5]

>>> b = list(reversed(a))

>>> b
[5, 4, 3, 2, 1]

>>> a
[1, 2, 3, 4, 5]

Вызов list() нужен для того, чтобы итератор, возвращенный функцией reversed() превратить в список.

insolor
  • 49,104
1

Потому, что списки в Python - это объекты. И код b=a в случае, если a - объект, означает, что b будет указывать на ту же область памяти, что и a.

0

для создания копии объекта используйте:

b = a[:]

или

import copy
b = copy.deepcopy(a)