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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了复制通过引用方法传递的参数的最佳实践,避免无意中修改参数相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

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

答案

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

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

以上是关于复制通过引用方法传递的参数的最佳实践,避免无意中修改参数的主要内容,如果未能解决你的问题,请参考以下文章

最佳实践:vue组件引用传值(续篇)

最佳实践:vue组件引用传值(续篇)

最佳实践:vue组件引用传值(续篇)

关于引用参数或显式返回值的 PHP 方法的最佳实践

如果传递给它们的函数接受引用,STL 算法函数(如累积)是不是避免复制?

LUA:避免通过引用传递