我想模拟python中的按值传递行为。换句话说,我想绝对确保我编写的函数不会修改用户提供的数据。

一种可能的方法是使用深层复制:

from copy import deepcopy
def f(data):
    data = deepcopy(data)
    #do stuff

是否有更有效或更Python的方式实现此目标,对传递的对象进行尽可能少的假设(例如.clone()方法)

编辑

我知道技术上python中的所有内容都是按值传递的。我对模拟行为很感兴趣,即确保我不会弄乱传递给函数的数据。我猜最一般的方法是使用其自身的克隆机制或Deepcopy来克隆所讨论的对象。

最佳答案

没有Python的方法可以做到这一点。

Python提供很少的设施来强制执行诸如私有(private)或只读数据之类的事情。 python的哲学是“我们都是成年人”:在这种情况下,这意味着“该功能不应更改数据”是规范的一部分,但未在代码中强制执行。

如果要复制数据,则可以找到最接近的解决方案。但是copy.deepcopy除了效率低下外,还需要注意such as:



因此,仅当您知道要处理内置的Python类型或您自己的对象时(如果您可以通过定义__copy__/__deepcopy__特殊方法来自定义复制行为,而无需定义自己的clone()方法,则建议您这样做) )。

10-06 04:23
查看更多