Python修改数组副本影响原始?

Coh*_*ent 4 python list

大家好,我很抱歉,如果这是一个菜鸟问题,但我使用的是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
Run Code Online (Sandbox Code Playgroud)

我期望的输出是xyzCoord不应该受到影响因为我复制(toAdd)然后修改它.奇怪的是,这个循环确实影响了我的xyzCoord:

输出是:

[[5.818, 0.0, 0.0], [0.0, 5.818, 0.0], [0.0, 0.0, 5.818]]

[[0.0, 0.0, 0.0], [2.909, 2.909, 0.0], ...

[[5.818, 0.0, 0.0], [8.727, 2.909, 0.0], ...
Run Code Online (Sandbox Code Playgroud)

编辑:对于上下文,我的想法是,我想最终使用转置值创建一个单独的列表,然后最终创建一个插入列表,但这部分让我感到高兴.即我理想地想创建:[[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.这样我可以在XY和Z中传播一些坐标并且任意次数.

Mar*_*som 7

这是关于Python最令人惊讶的事情之一 - =操作员永远不会复制任何东西!它只是为现有对象附加一个新名称.

如果要复制列表,可以使用列表的一部分; 切片操作符确实复制了.

toAdd=xyzCoord[i][:]
Run Code Online (Sandbox Code Playgroud)

您还可以使用copydeepcopycopy模块中复制对象.