Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 16, 2021 14:23:59

WildEspanica
Зарегистрирован: 2021-01-16
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Копирование 2d списков

a = [[0, 1],
[2, 3],
[4, 5]]
b = a
b[0][0] = 6
print(a)
>> [[6, 1], [2, 3], [4, 5]]
Копирую исходный заданный список, видоизменяю копию в процессе, но изменения так же затрагивают изначальный список. Почему это происходит и как этого избежать?

Отредактировано WildEspanica (Янв. 16, 2021 14:26:55)

Офлайн

#2 Янв. 16, 2021 14:26:43

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Копирование 2d списков

WildEspanica
видоизменяю копию в процессе
Кто вам сказал, что это копия? Почитайте учебник, раздел изменяемые и неизменяемые объекты

https://informatics.mccme.ru/mod/page/view.php?id=37581



Отредактировано FishHook (Янв. 16, 2021 14:27:33)

Офлайн

#3 Янв. 16, 2021 14:39:50

WildEspanica
Зарегистрирован: 2021-01-16
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Копирование 2d списков

FishHook
Почитайте учебник
Прочитал. Понял что переменные - это просто ссылки на объекты, в моём случае это один объект. Но способ предложенный там всё-равно не работает


Офлайн

#4 Янв. 16, 2021 14:45:53

WildEspanica
Зарегистрирован: 2021-01-16
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Копирование 2d списков

FishHook
Почитайте учебник
Всё, я догадался, спасибо за ссылку.
a =[[0,1],[2,3]]
b = []
for i in range(len(a)):
b += [a[i].copy()]
b[0][0] = 7

Офлайн

#5 Янв. 16, 2021 15:40:22

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Копирование 2d списков

  
>>> a = [[0, 1],
...      [2, 3],
...      [4, 5]]
>>> 
>>> b = [i[:] for i in a]
>>> b
[[0, 1], [2, 3], [4, 5]]
>>> 
>>> b[0][0] = 10
>>> a
[[0, 1], [2, 3], [4, 5]]
>>> b
[[10, 1], [2, 3], [4, 5]]
>>>



Офлайн

#6 Янв. 16, 2021 18:28:01

AD0DE412
Зарегистрирован: 2019-05-12
Сообщения: 1130
Репутация: +  44  -
Профиль   Отправить e-mail  

Копирование 2d списков

https://pythononline.ru/osnovy/modul-copy-python



1. пжлст, форматируйте код, это в панели создания сообщений, выделите код и нажмите что то вроде
2. чтобы вставить изображение залейте его куда нибудь (например), нажмите и вставьте ссылку на его url

есчщо

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version