复制通过引用方法传递的参数的最佳实践,避免无意中修改参数

问题描述 投票:0回答:1

我在执行以下代码行时的意图是使用cv2绘制我的原始图像(即img)。我可以说,它确实如此,但修改了img(这是不希望的)。

cbImg = cv2.drawChessboardCorners(img, (nx, ny), corners, ret)

我知道Python是传递引用,这意味着该方法可以改变参数。为避免修改原始图像,必须对副本进行操作(例如,如下所示)

cbImg = cv2.drawChessboardCorners(copy.copy(img), (nx, ny), corners, ret)

我将副本传递给cv2.drawChessboardCorners(),因为我无法修改该方法。但是,我已经看到了许多在该方法中执行复制的示例。

是否有关于应该进行复制的最佳做法?换句话说,如果我使用别人的方法,我是否应该总是传递副本以确保我的原始图像不被修改?或者,在编写自己的方法时,我是否应该总是(或从不)在我的方法中执行复制,以确保我不会无意中修改其他人的论点?此外,通常建议假设通过引用传递的参数应该被修改(或不修改)?

python copy pass-by-reference
1个回答
1
投票

最佳做法是让职能明确是否修改其论点。理想情况下,他们不会,因为这更容易推理。如果数据不大,则创建并返回新值是一个选项。

只有在知道函数修改其参数的事实时才制作副本,并且您肯定需要原始值和修改后的值。

© www.soinside.com 2019 - 2024. All rights reserved.