python - python错误列表参考
问题描述
你好社区,
SourcePoints = self.SourcePoints
TargetPoints = self.TargetPoints
print("SourcePoints: ", self.SourcePoints)
print("TargetPoints: ", self.TargetPoints)
for point in SourcePoints:
for i in range(len(point)):
point[i] = Origin[i] + point[i] * Spacing[i]
for point in TargetPoints:
for i in range(len(point)):
point[i] = Origin[i] + point[i] * Spacing[i]
print("SourcePoints: ", self.SourcePoints)
print("TargetPoints: ", self.TargetPoints)
您可能需要了解上下文: - self.SourcePoints/self.TargetPoints 在创建类的实例(继承代码)后初始化。没有其他部分可以操作列表。- self.SourcePoints/self.TargetPoints 是列表的列表 - 截断的代码是类中函数的一部分
我到目前为止还不是编程专家,所以我可能会在这里监督一些明显的事情,但我看不到它,这让我发疯,因为两个打印命令没有相同的输出......并且脚本崩溃(ofc)因为self.SourcePoints/self.TargetPoints 在后续迭代中是“错误的”。
所以你现在可以说,写
SourcePoints = self.SourcePoints
您不制作副本,而是创建对列表的引用,因此在 for 循环期间自然会更改原始列表。对我来说很有意义,这就是我尝试的原因
SourcePoints = copy.copy(self.SourcePoints)
和
SourcePoints = self.SourcePoints.copy()
两者都没有改变任何东西。
然后我对自己说,可能是因为列表名称相同。所以脚本认为如果我在类函数中使用变量“SourcePoints”,我想更改变量 self.SourcePoints。所以我把一切都改成了
srcPoints = self.SourcePoints.copy()
它仍然不起作用......我真的不知道发生了什么,它让我发疯。幸运的是,我绕过了脚本,但我仍在试图弄清楚为什么会一直发生这种情况。这两个打印命令如何没有相同的输出对我来说完全没有意义。然而,计算机只是在做我告诉他做的事情。
有人可以启发我吗?
问候,空
解决方案
您正在创建实例变量的浅表副本。要获得对象的完全独立副本,您可以使用该copy.deepcopy()
函数。
尝试对前 2 行进行以下更改
import copy
SourcePoints = copy.deepcopy(self.SourcePoints)
TargetPoints = copy.deepcopy(self.TargetPoints)
您可能会发现这篇文章有助于了解有关浅层和深层复制的更多信息 - 了解 dict.copy() - 浅层还是深层?
推荐阅读
- python - 在目录外运行脚本时出现 Python3.6 ImportError。在同一目录中正确运行
- php - 如何根据检索到的列类型为 bind_param 动态分配正确的类型?
- javascript - push() 更新数组时无法比较两个时间点的数组长度?
- javascript - 如何根据列值对每一行显示复选框 - JQuery DataTable
- javascript - 如何替换 HTML 字符串中的 value 属性?
- sql-server - 在 SSIS 中生成唯一的随机数
- python - 如何根据注释属性对networkx python图中的节点进行分组?
- mysql - mysqldump 后删除目录时出现错误代码
- r - R 为 sfc_POLYGON 中的多边形分配 ID 以进行绘图
- c - CLion 中的多个 C 源文件