你好!你知道吗
我尝试递归地运行以下代码,其中“vetor”是几个变量的当前状态,我将前50个存储在“matriz”中,这是一个包含50行和10列的二维数组。一切都初始化为零。你知道吗
在第一次迭代中,第一行取当前“vetor”的值。到目前为止还不错,但是在第二个循环中,“vetor”值被分配给“matriz”的第二行和第一行。例如,在最后一次迭代中,“matriz”的所有行都等于“vetor”的最后一个值。你知道吗
我学的是控制工程,主要是用C或MATLAB编程,所以我是Python的新手。。。你知道吗
下面,对代码部分进行了描述,我认为问题出在哪里。你知道吗
#armazena as variáveis do estado
vetor[0]=sc.get_ball_distance()
vetor[1]=sc.get_ball_angle()
vetor[2]=sc.get_target_angle()
vetor[3]=sc.get_obstacle_distance()
vetor[4]=sc.get_obstacle_angle()
vetor[5]=sc.get_spin()
vetor[6]=force_left_anterior
vetor[7]=force_right_anterior
vetor[8]=force_left
vetor[9]=force_right
#armazena o vetor de estado como linha na matriz
if cnt<50:
matriz[cnt]=vetor
cnt=cnt+1
当您在c/c++中有赋值
a = b
(matriz[cnt]=vetor
在您的例子中)时,将调用copy/asignment构造函数,并且基本上复制对象的内容。无论a
的类型是像int
/float
或struct
/class
(即std::vector<T>
)这样的基元类型。你知道吗然而在python中,变量
a
和b
是对对象的引用,比如c++引用或c指针(但是没有指针取消引用语法)。你知道吗c程序员可能认为修改
a
不会改变b
,但在下面的代码段中不是这样的将输出
[1, 2, 3, 42]
,因为a
和b
都是对同一对象(内存中)的引用。你知道吗要解决这个问题,您需要显式复制
vetor
,然后再将其分配给matriz[cnt]
。看看Shallow and deep copy operations。深度复制可能是您所需要的。你知道吗编辑:如果
vetor
是一个list
,一个简单的构造函数调用就可以做到:list(vetor)
相关问题 更多 >
编程相关推荐