我无法在Python中正确地将我想要的值分配给变量[重复]

问题描述 投票:0回答:2

我想操纵矩阵“b”,但由于我已将其初始值指定为等于矩阵“a”的初始值,因此矩阵“a”也被操纵,这是不希望的。我该如何解决这个问题?

import numpy as np
a=np.zeros((3,3))
b=a
b[0,:]=1
print('a=',a,'\n')

print('b=',b)

这段代码的结果是这样的:

a= [[1. 1. 1.]
 [0. 0. 0.]
 [0. 0. 0.]] 

b= [[1. 1. 1.]
 [0. 0. 0.]
 [0. 0. 0.]]

如您所见,这两个矩阵都已被修改。我写了这个小代码来说明我的问题。我的主程序是一个更大的程序,但我已经认识到了这个问题,就是这样。

python numpy variables variable-assignment assignment-operator
2个回答
2
投票

由于数组 a 和 b 都是 python 中的可变对象,一个简单的 = 使它们指向内存中的同一位置 - 因此,对

a
的更改也会导致对
b
的更改。这称为 浅复制

您正在寻找的是深拷贝

b = a.copy()

请参阅 本教程,了解有关浅拷贝与深拷贝的更多详细信息,或这个

int、float等内置类型在Python中是不可变对象,因此不存在浅拷贝。


2
投票

线

b = a
应该是
b = a.copy()

import numpy as np

a = np.zeros((3,3))
b = a.copy()
b[0,:] = 1
print('a = ',a,'\n')
print('b = ',b)
a = [[0. 0. 0.]
 [0. 0. 0.]
 [0. 0. 0.]] 
b = [[1. 1. 1.]
 [0. 0. 0.]
 [0. 0. 0.]]
© www.soinside.com 2019 - 2024. All rights reserved.