为什么修改数组副本会影响原始数组?

2024-10-02 06:21:28 发布

您现在位置:Python中文网/ 问答频道 /正文

大家好,如果这是一个noob问题,我很抱歉,但我正在使用python,我有一个问题,我复制一个数组,但当我修改副本时,它会影响原始数组。我想从边界矩阵向一组坐标添加线性偏移:

boundaries = [[5.818, 0.0, 0.0], [0.0, 5.818, 0.0], [0.0, 0.0, 5.818]]

xyzCoord = [[0.0, 0.0, 0.0], [2.909, 2.909, 0.0], ...

extraX=[]
for i in range(0,len(xyzCoord)):
    toAdd=[]
    toAdd=xyzCoord[i]
    toAdd[0]=toAdd[0]+boundaries[0][0]

print xyzCoord

我期望的输出是xyzCoord不会受到影响,因为我创建了一个副本(toAdd),然后对其进行了修改。奇怪的是,这个循环会影响我的xyzCoord:

输出为:

^{pr2}$

编辑:对于上下文,我的想法是,我希望最终用转换后的值创建一个单独的列表,然后最终创建一个插入列表,但这一部分阻碍了我。一、 e.我最理想的创作: [[0.0,0.0,0.0],[5.818,0.0,0.0],[2.909,0.0,0.0],[8.727,2.909,0.0]…] 然后对Y和Z做一个更大的循环,这样我可以传播X,Y,Z上的一些坐标,任意次数。在


Tags: in列表forlen副本range线性矩阵
3条回答

toAdd不是重复项。以下内容使toAdd引用与xyzCoord[i]相同的子列表:

toAdd = xyzCoord[i]

当您更改toAdd的元素时,xyzCoord[i]的相应元素也会更改。在

代替上述内容,请写下:

^{2}$

这将是一个(浅)副本。在

{cd1>最让人吃惊的是,{!它只是将一个新名称附加到现有对象上。在

如果你想复制一个列表,你可以使用列表的一个切片;切片操作符做一个拷贝。在

toAdd=xyzCoord[i][:]

您还可以使用copydeepcopy从{a1}复制一个对象。在

因为您使用的数组(列表列表)是一个对象,所以您只复制内部对象的引用,而不是复制值。在

相关问题 更多 >

    热门问题