Баг с добавлением элемента в массив

dadrdadr

Новичок
Пользователь
Апр 23, 2020
2
0
1
Народ, помогите пожалуйста с решением даного вопроса
При написании кода наткнулся на данный баг или хз что это

a=[0,1]
b=a
b.append(2)
print(a,b)

Выдаёт ответ [0, 1, 2] [0, 1, 2]
Вместо [0, 1] [0, 1, 2]

Заранее спасибо.

+++++++++++++
Питон 3.7.4
 

borntohack

змееуст
Команда форума
Модератор
Апр 22, 2020
78
62
18
39
Москва, РФ
это не баг. Списки в питоне неиммутабельны. Следовательно b=a означает, что и a и b ссылаются на один и тот же список.
Чтобы сделать именно "переменную" а не указатель на ячейку памяти, следует выполнить
Код:
b = a.copy()
 
  • Мне нравится
Реакции: dadrdadr

BPRO

Пользователь
Пользователь
Апр 22, 2020
12
8
3
Python:
a = [0, 1]
b = a.copy()
b.append(2)
print(a, b)
 

Rud356

Модератор
Команда форума
Модератор
Апр 5, 2020
44
21
8
Не называй, пожалуйста, больше так темы, это раз. А два - в питоне все переменные ссылочного типа и по этому получается, что массивы a и b = одному и тому же массиву. Добавляя в один или изменяя элемент в одном - меняешь и другой. Чтобы решить это поможет модуль copy из стандартной библиотеки, а конкретно функция deepcopy.
 

dadrdadr

Новичок
Пользователь
Апр 23, 2020
2
0
1
это не баг. Списки в питоне неиммутабельны. Следовательно b=a означает, что и a и b ссылаются на один и тот же список.
Чтобы сделать именно "переменную" а не указатель на ячейку памяти, следует выполнить
Код:
b = a.copy()
Понял, спасибо
 

Uliminittion

Новичок
Пользователь
Апр 23, 2020
3
0
1
можно обойтись без copy()
b= list(a)
 

Форум IT Специалистов