我在执行以下代码行时的意图是使用cv2在我的原始图像上绘制(即img)。我可以说,它确实如此,但修改了img(这是不希望的)。
cbImg = cv2.drawChessboardCorners(img, (nx, ny), corners, ret)
我理解Python是pass-by-reference,这意味着该方法可以改变参数。为避免修改原始图像,必须对副本进行操作(例如,如下所示)
cbImg = cv2.drawChessboardCorners(copy.copy(img), (nx, ny), corners, ret)
我将副本传递给cv2.drawChessboardCorners(),因为我无法修改该方法。但是,我已经看到了许多在该方法中执行复制的示例。
是否有关于应该进行复制的最佳做法?换句话说,如果我使用别人的方法,我是否应该总是传递副本以确保我的原始图像不被修改?或者,在编写自己的方法时,我是否应该总是(或从不)在我的方法中执行复制,以确保我不会无意中修改其他人的论点?此外,通常建议假设通过引用传递的参数应该被修改(或不修改)?
答案 0 :(得分:1)
最佳做法是让职能明确是否修改其论点。理想情况下,他们不会,因为这更容易推理。如果数据不大,则创建并返回新值是一种选择。
如果你知道函数修改了它的参数这个事实,你只需要复制,你肯定需要原始值和修改后的值。