Вопрос:

Скопированная переменная меняет оригинал?

python variables

62864 просмотра

3 ответа

431 Репутация автора

У меня есть простая проблема в Python, которая очень, очень странная.

def estExt(matriz,erro):
    # (1) Determinar o vector X das soluções
    print ("Matrix after:");
    print(matriz);

    aux=matriz;
    x=solucoes(aux); # IF aux is a copy of matrix, why the matrix is changed??

    print ("Matrix before: ");
    print(matriz)

...

Как вы видите ниже, матрица matrizизменяется, несмотря на то, что auxона изменяется функцией solucoes().

Матрица перед:
[[7, 8, 9, 24], [8, 9, 10, 27], [9, 10, 8, 27]]

Матрица после:
[[7, 8, 9, 24], [0.0, -0.14285714285714235, -0.2857142857142847, -0.42857142857142705], [0.0, 0.0, -3.0, -3.0000000000000018]]

Автор: André Freitas Источник Размещён: 14.11.2011 01:56

Ответы (3)


4 плюса

51186 Репутация автора

auxэто не копия matrix, это просто другое имя, которое относится к одному и тому же объекту.

Используйте модуль копирования для создания реальных копий ваших объектов.

Автор: omz Размещён: 14.11.2011 02:00

67 плюса

3809 Репутация автора

Решение

Линия

aux=matriz;

Не делает копию matriz, он просто создает новую ссылку на matriznamed aux. Вы, вероятно, хотите

aux=matriz[:]

Который сделает копию, предполагая, что matrizэто простая структура данных. Если это более сложный, вы, вероятно, должны использоватьcopy.deepcopy

aux = copy.deepcopy(matriz)

Кроме того, вам не нужны точки с запятой после каждого оператора, python не использует их в качестве маркеров EOL.

Автор: brc Размещён: 14.11.2011 02:00

17 плюса

5735 Репутация автора

Используйте модуль копирования

aux = copy.deepcopy(matriz) # there is copy.copy too for shallow copying

Незначительный: точки с запятой не нужны.

Автор: Shekhar Размещён: 14.11.2011 02:00
Вопросы из категории :
32x32