Я использую python 3.7.9.
-Мне нужно скопировать некоторые элементы из списка в другой список.
-Затем мне нужно произвести расчеты в моем новом списке без изменения исходного списка.
Но что бы я ни делал, мой исходный список претерпевает те же изменения, что и мой новый список.
Может кто-нибудь объяснить мне, почему?
Спасибо за ответ
2 ответа
В вашем коде вы выполняете задание:
reduite = mat[1:]
Это только связывает reduite
с элементами mat
.
Другими словами, переменная теперь ссылается на одни и те же объекты в памяти, поэтому при изменении одного из них изменяется другой (см. Также ссылку на Операторы присваивания).
Поскольку mat[1:]
- это список списков, лучше всего использовать copy.deepcopy()
при назначении (см. Также документация по copy
).
Этот пост также содержит отличные объяснения различных методов копирования.
В Python это явление называется мелкой копией.
В принципе,
reduite=mat[1:]
Принимает ссылки на внутренние объекты (которые снова являются массивами) mat, следовательно, изменение массива копий отражается на оригинале.
Для решения этой проблемы используйте deepcopy.
Похожие вопросы
Связанные вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.