首页 > 解决方案 > 第一个列表在附加另一个第二个列表后自动更新,然后在 Python 中更改第二个列表

问题描述

请看一下这段代码

a = [int(x) for x in bin(2)[2:]]
coordinates = []
sum = [1,3]
for x in a:
    if x == 1:
        coordinates.append(sum)
    m = ((3*(sum[0]**2)+A) * libnum.invmod(2*sum[1],p)) % p
    x3 = (m**2 - 2*sum[0]) % p
    sum[1] = ((m*(sum[0]-x3) - sum[1]) + p) % p
    sum[0] = x3

我的总和列表在循环中更新,如果新值符合条件,则应将其添加到坐标列表中。问题是,在将总和列表附加到坐标列表之后,每当总和值发生变化时,它们的坐标也会发生变化。它们之间存在某种联系。你能帮我解决这个问题吗?如何取消链接它们以便仅附加值并保持固定。

标签: pythonlist

解决方案


这是因为当您将列表值分配给新变量时,它仅存储参考号,当您将此变量附加到新列表时,将使用相同的参考号。因此,当您稍后更改该值时,它会更改由该引用编号定义的列表的值,从而更改该变量在使用时存储的内容。

例如

coordinates = []
some = [1,3] # avoid using 'sum' as variable name as it is a built in function
coordinates.append(some)

print("coordinates initially:", coordinates)

some.append("interesting")
print("coordinates after chaning 'some':", coordinates)

输出

coordinates initially: [[1, 3]]
coordinates after chaning 'some': [[1, 3, 'interesting']]

这对于小型列表没有意义,但是当您考虑到列表可以包含大量值时,使用参考编号会更快

因此,解决方案是我们实际上需要附加一些列表的副本,而不仅仅是参考编号。

为此,我们可以执行以下操作:

import copy

# We can use the copy.deepcopy() function and pass it the list we need copied
coordinates.append(copy.deepcopy(some))

推荐阅读