Я использую python 3.7.9.

-Мне нужно скопировать некоторые элементы из списка в другой список.

-Затем мне нужно произвести расчеты в моем новом списке без изменения исходного списка.

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

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

Спасибо за ответ

Режим отладки

0
Snakes 28 Фев 2021 в 12:17

2 ответа

Лучший ответ

В вашем коде вы выполняете задание:

reduite = mat[1:]

Это только связывает reduite с элементами mat.

Другими словами, переменная теперь ссылается на одни и те же объекты в памяти, поэтому при изменении одного из них изменяется другой (см. Также ссылку на Операторы присваивания).

Поскольку mat[1:] - это список списков, лучше всего использовать copy.deepcopy() при назначении (см. Также документация по copy).

Этот пост также содержит отличные объяснения различных методов копирования.

0
p3j4p5 28 Фев 2021 в 09:44

В Python это явление называется мелкой копией.

В принципе,

 reduite=mat[1:]

Принимает ссылки на внутренние объекты (которые снова являются массивами) mat, следовательно, изменение массива копий отражается на оригинале.

Для решения этой проблемы используйте deepcopy.

0
Samsul Islam 28 Фев 2021 в 09:42