python - 第一个列表在附加另一个第二个列表后自动更新,然后在 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
我的总和列表在循环中更新,如果新值符合条件,则应将其添加到坐标列表中。问题是,在将总和列表附加到坐标列表之后,每当总和值发生变化时,它们的坐标也会发生变化。它们之间存在某种联系。你能帮我解决这个问题吗?如何取消链接它们以便仅附加值并保持固定。
解决方案
这是因为当您将列表值分配给新变量时,它仅存储参考号,当您将此变量附加到新列表时,将使用相同的参考号。因此,当您稍后更改该值时,它会更改由该引用编号定义的列表的值,从而更改该变量在使用时存储的内容。
例如
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))
推荐阅读
- android - Google Paly 登录不适用于 Android
- sparql - 如何检索所有 sko:给定类的成员(树视图)
- batch-file - 确认用户的 FTP 上传
- c# - 如何使两个 foreach 同时“工作”/并行/异步
- environment-variables - 如何通过传递环境属性或部署属性在关键启动时增加 SCDF 任务的堆内存
- kubernetes - kubernetes 杀死比旧的容器?
- github - 从本地文件夹创建一个新的 git repo
- unity3d - 只有在触摸按钮而不是整个屏幕时,枪才应该射击
- javascript - 如果我通过链接更改站点,如何更改组件状态
- django - 根据 django 中的数据库计算自动填充表单中的字段